作业帮 > 数学 > 作业

关于matlab一次求解很多个形式相同的方程组

来源:学生作业帮 编辑:作业帮 分类:数学作业 时间:2024/05/18 07:13:52
关于matlab一次求解很多个形式相同的方程组
需要求解1000个方程组,这些方程组都是一元三次,且具有同样的形式,只是系数不一样,其形式如下:
p1(:).t^3+p2(:).t^2+p3(:).t=x 其中p1、p2和p3都是1000*1的数组,x为一个数值
我写的代码如下(随便给出p1、p2和p3、x 的数值):
p1=rand(1000,1); p2=rand(1000,1); p3=rand(1000,1); x=0.1;
sym t
eq=p1(:).t^3+p2(:).t^2+p3(:).t-x
t=solve(eq);
悲剧的是,这样解不出来,个人想可能是因为 t 的定义不对,请问该如何解决?十分感激!
代码不长,问题可不少:
1、第二行:
定义符号变量应该用syms t,而不是sym t(如果用sym函数,则应该返回参数t=sym(t));
2、第三行:
eq=p1(:).t^3+p2(:).t^2+p3(:).t-x
首先,相乘应该用“*”,而不是“.”;
其次,如果你把方程组写到一起,则求解时会被认为联立求解.我猜测你的1000个方程应该是独立求解的,这与你的希望不符.
3、如果想求数值解,可考虑用roots,速度比起求符号解相差无数倍.只需把循环体里面的内容改成下面的代码即可:
T(i,:)=roots([p1(i) p2(i) p3(i) -x]);
以下是改后的参考代码(每个方程的根保存为一行):
p1=rand(1000,1); p2=rand(1000,1); p3=rand(1000,1); x=0.1;
T = sym(zeros(1000,3));
for i=1:length(p1)
syms t
eq=p1(i)*t^3+p2(i)*t^2+p3(i)*t-x;
T(i,:)=solve(eq).';
end