作业帮 > 综合 > 作业

在使用matlab 符号运算中的solve函数时,为啥计算的结果是空集?该怎么办?

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/14 19:02:34
在使用matlab 符号运算中的solve函数时,为啥计算的结果是空集?该怎么办?
我的程序如下:
clear;
clc;
syms u_d u_q w_r r i_d x_d x_md x_q x_mq i_q x_f r_f u_f x_ad i_f T_t T_em F w_omega P_g u_dc C p_n k v_wind U_g G_s B_s U_s cos_delta sin_delta m Q_e;
f1 = r*i_d - w_r*x_q*i_q - w_r*x_mq*i_q + x_ad*r_f*i_f/x_f -x_ad*u_f/x_f + u_d;
f2 = w_r*(x_d + x_md)*i_d + w_r*x_ad*i_f + r*i_q + u_q;
f3 = r*i_d -w_r*x_q*i_q -w_r*x_mq*i_q + (x_d + x_md)*r_f*i_f/(2*x_ad) - (x_d + x_md)*u_f/(2*x_ad) + u_d;
f4 = T_t - T_em -F*w_omega;
f5 = i_d*u_d + i_q*u_q - P_g;
f6 = w_r - p_n*w_omega;
f7 = sqrt(u_d^2 + u_q^2) - u_dc/2.34;
f8 = T_t - k*v_wind/w_omega;
f9 = T_em - (i_d*u_d + i_q*u_q + 3*r*(i_d^2 + i_q^2))/w_r;
f10 = P_g - U_g^2*G_s - U_g*U_s*(G_s*cos_delta + B_s*sin_delta);
f11 = U_g - u_dc*m/(2*sqrt(2));
f12 = Q_e + u_d*i_q + u_q*i_d;
[i_d,i_q,i_f,w_omega,u_dc,w_r,u_d,u_q,T_t,T_em,P_g,U_g] = solve(f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12);
得到的结果是:
i_d =[ empty sym i_q ==[ 其他的都是空,输入字符有限,这里省了。
你在进行符号运算的时候,solve求的是解析式,matlab要是认为没有解析式的解,就会给你空的答案的.结果已经显示是empty sym,符号变量没有解.你得考虑用数值解了.解不出解析解很正常,就好比你解全是字母的方程可能解不出来遇到超越方程一样.
再问: 哦,谢谢,那用solve解不出来是不是表示手算也没有解析解啊?
再答: 倒也不一定,因为手算的话你可以仔细观察,代换代换化简式子,兴许就给解出来了(你这儿这么多未知数,汗),而程序都是按照固定的算法死算,有一步过不去就通通过不去,所以很容易告诉你没解。程序的优势都是在数值计算上,算得比人快,因为不用怎么“动脑子”,而人脑在处理这种需要变通的问题的时候更加有效率。
再问: 偶买噶,谢啦啊!那只有手算了。。。
再答: 恩,你可以两种方法结合。先代换一下降低维度,然后再让matlab去算。这样可能会有解。 最根本的办法可能需要你化简下所列的方程,因为你研究的问题可能不需要这么多参变量的吧,你可以固定其中几个然后考察函数是什么样的呀,这么渐进地来。
再问: 嗯,好,灰常感谢!