题主的问题属于数值分析中的迭代法,用于求解一元二次方程的数值解。实现这种方法可以按下列方法来做:
1、使用for循环语句,求解x(n+1),并赋值给临时变量,即ls_n1=x(n+1);ls_n=x(n);
2、使用if判断语句,当|x(n+1)-x(n)|≤1e-5时,停止for循环,给出x的数值解。
3、实现代码
a0=[1 8 10];
b0=[1 3 0.1];
for i=1:3
a=a0(i);b=b0(i);
x(1)=1.0;
for n=1:500
x(n+1)=a/(b+x(n));
ls_n1=x(n+1);ls_n=x(n);
if abs(ls_n1-ls_n)<1e-5
disp(['a=',num2str(a),',b=',num2str(b)])
disp(['r的数值解为']);disp(limt_n1)
r=(-b+sqrt(b^2+4*a))/2;
disp(['r的精确解:']);disp(r)
break
end
ls_n=ls_n1;
end
end
4、运行后,比较结果
大神,给跪了,以后matlab有不懂得可以私发吗
可以问的。
model:
sets:
city/1..6/:u;
link(city,city):dist,x;
endsets
data:
dist=0 702 454 842 2396 1196
702 0 324 1093 2136 764
454 324 0 1137 2180 798
842 1093 1137 0 1616 1857
2396 2136 2180 1616 0 2900
1196 764 798 1857 2900 0;
enddata
n=@size(city);
min=@sum(link:dist*x);
@for(city(k):@sum(city(i)|i#ne#k:x(i,k))=1;
@sum(city(j)|j#ne#k:x(k,j))=1;);
@for(city(i):@for(city(j)|j#gt#1 #and# i#ne#j:u(i)-u(j)+n*x(i,j)<=n-1););!此项约束用于防止出现子巡回路线;
@for(city(i):u(i)<=n-1);
@for(link:@bin(x));
end
看不懂啊…求matlab的