【问题标题】:function handle is not converting - matlab函数句柄未转换 - matlab
【发布时间】:2017-07-17 09:19:02
【问题描述】:

我收到以下错误:

无法从 double 转换为 function_handle。

已经搜索过它并试图更改我的代码但没有成功。你能帮忙吗?谢谢

A=[99.23;100.05;91;107.71;104.1];
B=[3441 3441 301720.5;68750 1068750 0;170040 13085020 0;229350 229350 5729350;34194000 0 0];
N=[300000;1000000;13000000;5500000;32800000];
E=[-0.00302;-0.00261;-0.00208];

[c3,r3]=size(A);
[c4,r4]=size(B);

x=sym ('x',[1 c3]);
x=transpose(x);

for i=1:c3
    Valor(i,1)=0;
    for j=1:r4
        Valor(i,1)=@(x){(Valor(i,1)/((1+E(j,1)+x(j,1))^j))+(B(i,j)/((1+E(j,1)+x(j,1))^j))};
    end
end

我想要的是找到向量 x,因为我已经有一个向量 Valorantigo 用于应用求解。

Valorantigo(1:c3,1)=A(1:c3,1).* N(1:c3,1) ./100;
eqn=Valor(1:c3,1)==Valorantigo(1:c3,1); 
[solx, param, cond] = solve(eqn, x, 'ReturnConditions', true);

基本上 x 将是解决方案

  • Valorantigo(1,1)=3441/(1-0.00302+x1) + 3441/(1-0.00261+x1)^2 + 301720.5/(1-0.00208+x1)^3
  • Valorantigo(2,1)=68750/(1-0.00302+x2) + 1068750/(1-0.00261+x2)^2 + 0/(1-0.00208+x2)^3
  • Valorantigo(3,1)=170040/(1-0.00302+x3) + 13085020/(1-0.00261+x3)^2 + 0/(1-0.00208+x3)^3
  • 其他行也一样...

【问题讨论】:

  • 你想用=@(x){ .... } 完成什么?只是填充数组Valor?然后将其移除并留下内部
  • @AnderBiguri 是的,我想填充矩阵 Valor。我放了{...},因为我认为这是解决我的错误的一种方法。即使我删除了我有一些错误。
  • @AnderBiguri 已经详细说明了。你能帮忙吗?我从星期五开始就在处理这个问题,但找不到修复我的代码的方法

标签: matlab for-loop vector symbolic-math function-handle


【解决方案1】:

只是相关部分:

 Valor(1,1)=symfun(0,x);
 for i=1:c3
    Valor(i,1)=symfun(0,x);
    for j=1:r4
        Valor(i,1)=symfun( Valor(i,1)/(1+E(j,1)+x(j,1))^j+(B(i,j)/((1+E(j,1)+x(j,1))^j)),x);
    end
end

Valor 需要预先定义为象征性的,Valor(i,1)=0; 你把它变成了双倍。


哦差点忘了,你的解决方案应该是这样的:

[solx1,solx2,solx3,solx4, solx5, param, cond] = solve(eqn, x, 'ReturnConditions', true);

【讨论】:

  • 但是这样matlab不会计算向量Valor。是不是可能有这样的结果:Valor=3441/(1-0.00302+x1) + 3441/(1-0.00261+x2)^2 + 301720.5/(1-0.00208+x3)^3?谢谢
  • @ArleteFerreira 进行了 soe 更改,现在为我工作,使用您的附加代码。唉,我不知道解决命令应该如何在这里工作......
  • 为什么要创建 5x3 符号?它应该只是一个 5x1 符号
  • 代码正在运行,但我得到这个输出 Empty sym: 0-by-1x1
  • 是的,我也无法解决这个问题。但我怀疑这是你的方程系统,而不是 Matlab。它是我无法解决的。用手试一下,意思是:求解x1,代入下一个方程,然后是x2,usw。解决
猜你喜欢
  • 1970-01-01
  • 2018-10-30
  • 2019-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多