Matlab在Gui中方程系数输入调用以及sym转换double问题

如下
function Fb_Callback(hObject, eventdata, handles)

Fb = str2num(get(hObject, 'String'));

if isnan(Fb)

set(hObject, 'String', 0);

errordlg('Input must be a number','Error');

end

% Save the new Fb value

handles.metricdata.Fb = Fb;

guidata(hObject,handles)

function q_Callback(hObject, eventdata, handles)

q = str2num(get(hObject, 'String'));

if isnan(q)

set(hObject, 'String', 0);

errordlg('Input must be a number','Error');

end

% Save the new density value

handles.metricdata.q = q;

guidata(hObject,handles)

想用Fb以及q带入到一个二元一次方程中作为系数解出x,y作为Fc,Fg输出

function pushbutton1_Callback(hObject, eventdata, handles)

[x,y]=solve('1.323*x+4.011*y=5981.76+2.008*handles.metricdata.q+10.171*handles.metricdata.Fb','4.011*x+1.323*y=19396.053+1.008*handles.metricdata.q+3.059*handles.metricdata.Fb','x,y');

Fc = double(x);Fg = double(y);

set(handles.Fc, 'String', Fc);

set(handles.Fg, 'String', Fg);
这种就会输出
Error using mupadmex
Error in MuPAD command: DOUBLE cannot convert the input expression into a double
array.
If the input expression contains a symbolic variable, use the VPA function instead.
Error in sym/double (line 936)
Xstr = mupadmex('symobj::double', S.s, 0);
Error in cl>pushbutton1_Callback (line 146)
Fc = double(x);Fg = double(y);
等等错误信息,求高手解救。。。

出错原因:

你在调用solve解方程组的时候,输入参数是字符串:

[x,y]=solve(....,'x,y');

这种情况下,handles.metricdata.q和handles.metricdata.Fb都是以字符串的形式传递给符号运算内核,而这两个变量的值根本没起到作用。这样,方程组求解失败,后面再调用double试图将结果转换成数值类型当然会出错。

 

修改建议(选择其中一种):

 

1、使用符号表达式作为输入参数调用solve:

syms x y
q=handles.metricdata.q; Fb=handles.metricdata.Fb;
[x,y]=solve(-(1.323*x+4.011*y)+5981.76+2.008*q+10.171*Fb,-(4.011*x+1.323*y)+19396.053+1.008*q+3.059*Fb,x,y)

 

2、把变量值转换为字符串:

[x,y]=solve(['1.323*x+4.011*y=5981.76+2.008*' num2str(handles.metricdata.q) '+10.171*' num2str(handles.metricdata.Fb)], ['4.011*x+1.323*y=19396.053+1.008*' num2str(handles.metricdata.q) '+3.059*' num2str(handles.metricdata.Fb)],'x,y');

注意,后一种方法使用num2str转换过程中可能会损失精度(默认保留四位小数),写法也更繁琐,不推荐。

温馨提示:内容为网友见解,仅供参考
无其他回答

Matlab在Gui中方程系数输入调用以及sym转换double问题
1、使用符号表达式作为输入参数调用solve:syms x yq=handles.metricdata.q; Fb=handles.metricdata.Fb;[x,y]=solve(-(1.323*x+4.011*y)+5981.76+2.008*q+10.171*Fb,-(4.011*x+1.323*y)+19396.053+1.008*q+3.059*Fb,x,y)2、把变量值转换为字符串:[x,y]=solve(['1.323...

matlab中sym数据类型如何变为double?
sym是符号类型,要转为double需要使用以下代码:sym x x1=double(x)

matlab中怎样把sym型变量变为double型变量
ans = double

用Matlab优化工具箱时,如何将sym型转换成double?
用Matlab优化工具箱时,如何将sym型转换成double? 20 Matlab优化工具箱中目标函数直接手写成y=x(1)^4-8*x(2)-4*x(1)+15;可以运行,但是我用符号积分得到一样的目标函数y=x(1)^4-8*x(2)-4*x(1)+15就运行不了,FMINCONrequiresallvaluesret... Matlab优化工具箱中目标函数直接手写成y=x(1)^4 - ...

Matlab从 sym 转换为 double 时出现以下错误?
出错 Untitled4 (line 3)表示第三行出错,后面的代码就不运行了,所以后面代码你不必贴上来。第二行代码T(1)=1; 指定了T是个双精度(double)类型数据,所以第三行运行时加入符号(sym)类型数据会出错,解决办法:将第二三行代码替换为T = [1; K];

matlab字符和数字, 这个提示sym转double有问题
并不是你理解的那个地方有问题,是a(i)=cos(i*x)这个数据格式有错;x是sym形变量,不能被这样a(i)这样的矩阵储存,要用a{i}。还有记得先声明矩阵a=[]。

matlab中sym符号变量不是一个固定的数,怎么转变为double类型?_百度知...
你的这种写法是不是有问题?比如 sym 可能应该是syms、j 这个变量是不必要的、syms 函数放在循环里似乎不大好(虽然对结果应该没什么影响)。至于转变,赋值语句(sum=3之类)具有最高的权限,会无视该变量原来是什么。另外,对符号变量及符号函数而言,subs——替换——比较常用,比如 y=x+1,z=...

如何将matlab中的sym数据类型转换为double型
使用double函数 比如 >> root=solve('x^2+5*x-10')root = -5\/2+1\/2*65^(1\/2)-5\/2-1\/2*65^(1\/2)>> class(root)ans = sym >> root=double(root)root = 1.5311 -6.5311 >> class(root)ans = double by dynamic see also http:\/\/www.matlabsky.com contact me matlab...

matlab:如何在GUI的文本框中输入一个微分方程组?
f3 = matlabFunction(sol(3)); % 将第三个微分方程转换为函数 因此,可以在 GUI 的文本框中输入微分方程组并将其解析为几个函数。要在按钮回调函数 'pushbutton1_Callback'中调用这些函数,可以使用以下代码:调用第一个函数 result1 = f1(input1, input2, ...);调用第二个函数 result2 = ...

matlab求救!无法将sym类型转换为double类型
xlabel('T(s)'),title('全响应,零输入响应,零状态响应')结果:yzi = -2*exp(-2*t)+3*exp(-t)yzs = 1-exp(-t)y = -2*exp(-2*t)+2*exp(-t)+1 yht = -2*exp(-2*t)+3*exp(-t)yt = 1-exp(-t)yp = 1-4*exp(-t)+2*exp(-2*t)yh = -4*exp(-2*t)+6*...

相似回答