关于matlab一次求解很多个形式相同的方程组需要求解100-查字典问答网
分类选择

来自景瑞林的问题

  关于matlab一次求解很多个形式相同的方程组需要求解1000个方程组,这些方程组都是一元三次,且具有同样的形式,只是系数不一样,其形式如下:p1(:).t^3+p2(:).t^2+p3(:).t=x其中p1、p2和p3都是1000*1的

  关于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;

  symt

  eq=p1(:).t^3+p2(:).t^2+p3(:).t-x

  t=solve(eq);

  悲剧的是,这样解不出来,个人想可能是因为t的定义不对,请问该如何解决?十分感激!

1回答
2019-10-26 18:17
我要回答
请先登录
石光

  代码不长,问题可不少:

  1、第二行:

  定义符号变量应该用symst,而不是symt(如果用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));

  fori=1:length(p1)

  symst

  eq=p1(i)*t^3+p2(i)*t^2+p3(i)*t-x;

  T(i,:)=solve(eq).';

  end

2019-10-26 18:19:29

最新问答

推荐文章

猜你喜欢

附近的人在看

推荐阅读

拓展阅读

  • 大家都在看
  • 小编推荐
  • 猜你喜欢
  •