我想使用符号数学工具箱在MATLAB R2013a中解决以下等式。
(y/x)-(((1+r)^n)-1)/r=0 where y,x and n>3 are given and r is the dependent variable
我试过自己&编码如下:
f=solve('(y/x)-(((1+r)^n)-1)/r','r')
但由于r的解决方案并不精确,即它在连续迭代时收敛,因此MATLAB正在给出一条带有消息的警告输出
Warning: Explicit solution could not be found.
f =
[ empty sym ]
我该如何编码?
答案 0 :(得分:0)
我想你也忘了定义n。
f=solve('(y/x)-(((1+r)^n)-1)/r=0','n-3>0','r','n')
应该解决你的问题:)
答案 1 :(得分:0)
对于n > 3
和未知r
的未指定值,有无数的解决方案。我希望非常清楚为什么 - 它有效地要求(1+r)^n
的根源越来越多。但是,您可以找到固定值n
的解决方案。请注意,随着n
越来越大,有越来越多的解决方案,当然其中一些很复杂。我假设你只对r
的真实价值感兴趣。您可以对n = 4
,n = 5
和n = 6
使用solve
和符号数学(对于n = 6
,解决方案可能不方便):< / p>
y = 441361;
x = 66990;
n = 5;
syms r;
rsol = solve(y/x-((1+r)^n-1)/r==0,r,'IgnoreAnalyticConstraints',true)
double(rsol)
然而,问题是“您是否需要所有解决方案或仅针对给定值n
”的特定解决方案?如果您只需要一个特定的解决方案,那么您根本不应该使用符号数学,因为它较慢并且存在实际问题,例如您遇到的问题。您只需使用数值方法即可找到接近指定初始猜测的方程零。 fzero
是在单个变量中解决此类问题的标准函数:
y = 441361;
x = 66990;
n = 5;
f = @(r)y/x-((1+r).^n-1)./r;
r0 = 1;
rsol = fzero(f,r0)
您将看到返回的值与上面符号解决方案中的一个解决方案相同。如果您调整初始猜测r0
(比如说r0 = -3
),它将返回另一个解决方案。在有多个解决方案的情况下使用数字方法时,如果您需要特定的解决方案,则需要了解函数的行为,并且需要添加一些聪明的额外代码来选择初始猜测。