1

我有一个通用方程

t=tr+(ts-tr)/(1+(a*h)^n)^(1-1/n)

对于 (h=0, 1, 2, 3),我有 t=2.000, 1.6300, 1.2311, 1.1084。因此有 4 个方程有 4 个未知数 tr, ts, a, n

我在matlab中使用了“解决”功能

s=solve('tr+(ts-tr)/(1+(a*0)^n)^(1-1/n)=2','tr+(ts-tr)/(1+(a*1)^n)^(1-1/n)=1.63','tr+(ts-tr)/(1+(a*2)^n)^(1-1/n)=1.2311','tr+(ts-tr)/(1+(a*3)^n)^(1-1/n)=1.1084')

错误是

???在 MuPAD 命令中使用 ==> mupadmex 时出错:奇点 [ln];

在评估“numeric::fsolve”期间

2018 年 ==> sym.sym>sym.mupadmexnout 出错 out = mupadmex(fcn,args{:});

==> 在 76 处求解时出错 [symvars,R] = mupadmexnout('symobj::solvefull',eqns,vars);

我应该怎么办?

4

1 回答 1

0

使用该solve功能会出现问题。这只适用于简单的方程,最好使用该fsolve函数。由于我担心我正在为您做作业,因此我只会向您展示如何使用fsolve.

假设你想解决

 1 = x_1
 1 = x_1 + x_2
-1 = x_1 + x_2 + x_3
-1 = x_1 + x_2 + x_3 + x_4

那么你首先需要做的就是把这些写成方程等于 0

 0 = x_1 - 1
 0 = x_1 + x_2 - 1
 0 = x_1 + x_2 + x_3 + 1
 0 = x_1 + x_2 + x_3 + x_4 + 1

那么你需要编写一个函数,它接受一个向量,x的组件x将代表x_1x_2和。该函数的输出也将是一个向量,其分量应为上述方程右侧的输出(参见下面的函数)。该函数将被调用,以便为它提供对 的正确值的猜测,直到它猜测正确。当我们自己从未实际运行此功能时。这就是为什么它低于顶部功能。x_3x_4funfSolvex

然后你通过创建这个函数的函数句柄fHandle = @fun。你可以把它想象fHandle成另一个名字fun,当我们计算时fHandle([1; 2; 3; 4])这和计算是一样的fun([1; 2; 3; 4])。在此之后,您对正确的向量进行初步猜测x,假设我们选择了xGuess = [1; 1; 1; 1]。最后我们将 fHandle 和 xGuess 传递给fSolve.

这是代码

function Solve4Eq4Unknown()
fHandle = @fun;
xGuess = ones(4,1);
xSolution = fsolve(fHandle, xGuess)
end

function y = fun(x)
y = zeros(4,1); % This step is not necessary, but it is effecient
y(1) = x(1) - 1;
y(2) = x(1) + x(2) - 1;
y(3) = x(1) + x(2) + x(3) + 1;
y(4) = x(1) + x(2) + x(3) + x(4) + 1;
end
于 2013-12-02T03:34:03.677 回答