matlab solve的用法已知x,y都是10*100的矩阵.现在想用下面的语句确定函数参数a,b,c.但是求不出来.请问如果下面的语句有错应该怎么改呢?for z=1:10x1=x(z,1);x2=x(z,50);x3=x(z,100);y1=y(z,1);y2=y(z,50);y3=y(z,100);
来源:学生作业帮助网 编辑:六六作业网 时间:2024/12/24 01:06:29
matlab solve的用法已知x,y都是10*100的矩阵.现在想用下面的语句确定函数参数a,b,c.但是求不出来.请问如果下面的语句有错应该怎么改呢?for z=1:10x1=x(z,1);x2=x(z,50);x3=x(z,100);y1=y(z,1);y2=y(z,50);y3=y(z,100);
matlab solve的用法
已知x,y都是10*100的矩阵.现在想用下面的语句确定函数参数a,b,c.但是求不出来.请问如果下面的语句有错应该怎么改呢?
for z=1:10
x1=x(z,1);
x2=x(z,50);
x3=x(z,100);
y1=y(z,1);
y2=y(z,50);
y3=y(z,100);
[a,b,c]=solve('y1*(x1*a+b)=c*x1','y2*(x2*a+b)=c*x2','y3*(x3*a+b)=c*x3');
end
matlab solve的用法已知x,y都是10*100的矩阵.现在想用下面的语句确定函数参数a,b,c.但是求不出来.请问如果下面的语句有错应该怎么改呢?for z=1:10x1=x(z,1);x2=x(z,50);x3=x(z,100);y1=y(z,1);y2=y(z,50);y3=y(z,100);
matlab的运行结果是: 0 -8.0000 -8.5000 - 0.8660i -0.0000 + 0.0000i -8.5000 + 0.8660i -0.0000 - 0.0000i上面的结果自身就是不正确的,我分析的原因是:matlab先求出了解析解,接着代入系数值,由于matlab运算精度低,系数又太多,公式极其复杂,从而导致结果失真过于严重mathematica运行结果显示:mathematica先求出解析解,接着精确代入系数值计算,也出现了数量级为-16的误差,有部分失真,但是这个失真很容易发现,而得到修正mathematica执行消去y的运算结果显示原方程组只能由三组解借助mathematica的结果分析,可以得出:matlab的运行结果中,并没有丢失一组解,而是解的失真太为严重达到了0.1,可以用下面的程序执行数值function s=sss(p) syms x ya=p(1); b=p(2); c=p(3); d=p(4); e=p(5); f=p(6); g=p(7);a1=simplify(c*x^2+c*x*y+(c*g-c*a-c*b+1)*x-a-e);a2=simplify(d*y^2+d*x*y+(d*g-d*a-d*b+1)*y-b-f); [x0,y0]=solve(a1,a2);s=[x0 y0] 这个程序运行速度快且结果准确,结果为[ 0, 0][ 0, -8][ -13, 0]注:可以看到新的程序输出结果是矩阵形式,而老程序的输出不是,问题很可能和eval的使用有关.
改成:
for z=1:10
x1=x(z,1);
x2=x(z,50);
x3=x(z,100);
y1=y(z,1);
y2=y(z,50);
y3=y(z,100);
sol=solve('y1*(x1*a+b)=c*x1','y2*(x2*a+b)=c*x2','y3*(...
全部展开
改成:
for z=1:10
x1=x(z,1);
x2=x(z,50);
x3=x(z,100);
y1=y(z,1);
y2=y(z,50);
y3=y(z,100);
sol=solve('y1*(x1*a+b)=c*x1','y2*(x2*a+b)=c*x2','y3*(x3*a+b)=c*x3',‘a’,'b','c');
aa=sol.a;
bb=sol.b;
cc=sol.c;
end
若有疑问,继续追问
收起