回 帖 发 新 帖 刷新版面

主题:求助超越方程组的解法

请问各位高手,下面的这个超越方程组能否用matlab求解,用什么函数解?其中sx1和sx2是未知数。
sx1=qs/(2*sqrt(qs^2+4*js*sx1+je*sx2)*tanh(sqrt(qs^2+4*js*sx1+je*sx2)/(2*k*t))
sx2=q/(2*sqrt(q^2+4*sx2+2*je*sx1)*tanh(sqrt(q^2+4*sx2+2*je*sx1)/(2*k*t))

回复列表 (共20个回复)

11 楼

怎么没人理我呢,请高手帮忙看看,现在课题全卡住了,急急!!!

12 楼

首先请确定你的方程组书写正确,注意不要漏括号。
然后,你可以使用fsolve求解方程组。
具体用法建议参考2楼的书写形式。不要照抄,好好核对一下你的求解方程组的书写。
MFILE中输入的参数是sx,输出参数是F。注意应该使用sx(1)和sx(2),不要和sx1和sx2混淆书写。
fslove可以调用格式: [x,fval,exitflag] = fsolve(@myfun,x0)
选定初始点x0时你可以使用你文献中的解来验证。
exitflag=1时正确求解。为负值时求解失败。

13 楼

小妮妮你好!
我路过此论坛,偶见你发帖求助,为写论文而急急
所以顺便帮你求解了,供你参考。
希望对你能有帮助。

求解过程如下。(由于你的问题中参数没有具体给出,我假设了一组数据)

MFILE的文件名可以定为myfun.m。
具体内容如下:
function F = myfun(sx)
%以下是6个参数的设定,你根据你问题要求调换。
qs=1;
js=1;
je=1;
k=1;
t=1;
q=1;

%以下是返回结果
F = [qs/(2*sqrt(qs^2+4*js*sx(1)+je*sx(2))*tanh(sqrt(qs^2+4*js*sx(1)+je*sx(2))/(2*k*t)))-sx(1); q/(2*sqrt(q^2+4*sx(2)+2*je*sx(1))*tanh(sqrt(q^2+4*sx(2)+2*je*sx(1))/(2*k*t)))-sx(2)];

在matlab中的运行命令:
%设定初始值
x0=[0 1];
%调用fsolve函数求解超越方程组
[x,fval,falg]=fsolve(@myfun,x0)

求解结果如下:
Optimization terminated: first-order optimality is less than options.TolFun.

x =

    0.4105    0.3788


fval =

  1.0e-006 *

    0.6236
    0.4589


falg =

     1

祝你论文成功。

14 楼

我用文献上的解作为初值,画出来的图形和文献上不同,有时exitflag为负值,下附我的代码,请高手帮忙看看,太着急了!!其中sx1,sx2,tc为未知数
主程序:
clear all;clc;close all;
global js;
global q;
Tc =[];
Sx1=[];
Sx2=[];
%q_par  = [0.9];
%q_par  = [1.065];
q_par  = [2.0];
js_par = 2.0:-0.01:0;
n0= [unifrnd(0,0.5) unifrnd(0,0.5) 1.8];
for q = q_par
    js = js_par(1);
    options=optimset('display','on');
    [n(1,:),fval,exitflag]=fsolve(@myfun,n0,options)
    for i = 2:length(js_par) 
        js = js_par(i);
 [n(i,:),fval,exitflag]=fsolve(@myfun,n(i-1,:),options)
        end
    Tc = [Tc n(:,3)]
    Sx1=[Sx1 n(:,1)]
    Sx2=[Sx2 n(:,2)]
end
plot(Tc,js_par)
str =[];
for i=1:length(q_par)
    str = strvcat(str,num2str(q_par(i)));
end
legend(str,4);
xlabel('Tc/Ja')
ylabel('Js/Ja')
下面是函数,和我给出的函数有些差别
function y=myfun(n)
global js
global q
syms tc sx1 sx2 
je=1.0;
qs=2.0;
k=1.0;
sx1=n(1);
sx2=n(2);
tc=n(3);
w31=sqrt(qs^2+4*js*qs*sx1+je*q*sx2);
w32=sqrt(q^2+4*q*sx2+je*qs*sx1+je*qs*sx1);
y(1)=qs/(2*w31)*tanh(w31/(2*k*tc))-sx1;
y(2)=q/(2*w32)*tanh(w32/(2*k*tc))-sx2;
N=[2*w31*coth(w31/(2*k*tc))-4*js, -je, 0;
     -je, 2*w32*coth(w32/(2*k*tc))-4, -je;
     0, -je, 2*w31*coth(w31/(2*k*tc))-4*js];
y(3)=det(N);

15 楼

怎么没有人帮忙呢,呜呜!!

16 楼

怎么没有人帮忙呢

17 楼

solve 和 fsolve 有什么区别呢 ?

18 楼

Function F = myfun(sx)
F = [qs/(2*sqrt(qs^2+4*js*sx1+je*sx2)*tanh(sqrt(qs^2+4*js*sx1+je*sx2)/(2*k*t)))-sx(1);
      q/(2*sqrt(q^2+4*sx2+2*je*sx1)*tanh(sqrt(q^2+4*sx2+2*je*sx1)/(2*k*t)))-sx(2)];
难道这样 就是说两个方程联立的 ?

19 楼

对于上面的表达形式,你看看matlab教程就清楚了

20 楼


呵呵 
你的意思就是正确了?

我来回复

您尚未登录,请登录后再回复。点此登录或注册