You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Maxima的solve()求解幂函数双变量遇空结果,求解决方法

解决Maxima中solve()求解幂函数参数返回空结果的问题

问题背景

我想用Maxima的solve()函数求解幂函数 f(x) = b * x^a 的参数a和b,已知函数图像经过点(8, 6)和(18, 2)。按照文档示例在wxMaxima中输入:

%i1 solve ([b*8^a=6,b*18^a=2], [a,b]);
%o1 []

返回空结果。我知道可以通过手动推导公式计算参数(代码如下),但步骤繁琐,想知道是不是遗漏了solve()的相关设置?

手动计算代码:

findA: a=(log(y_2/y_1)/log(x_2/x_1));

findB: b = y_1/x_1^a;

[x_1=8,y_1=6,x_2=18,y_2=2];

subst (%, findA), numer;
a=-1.354755645675727

subst ([x_1=8,y_1=6,x_2=18,y_2=2,a=-1.354755645675727], findB), numer;
b=100.37313960722

问题原因

Maxima默认的solve()函数仅支持解析求解代数方程(如多项式方程),而你的方程组包含指数位置的未知数a,属于超越方程,默认solve()无法处理这类方程,因此返回空列表。

解决方法

1. 加载to_poly_solve扩展包

to_poly_solve是Maxima的扩展包,支持求解包含指数、对数的超越方程。加载后solve()即可返回解析解,再通过numer转为数值结果:

%i1 load(to_poly_solve);
%i2 solve ([b*8^a=6,b*18^a=2], [a,b]);
%o2 [[a = log(1/3)/log(9/4), b = 6*8^(-log(1/3)/log(9/4))]]

%i3 solve ([b*8^a=6,b*18^a=2], [a,b]), numer;
%o3 [[a = -1.354755645675727, b = 100.3731396072202]]

2. 手动消元化简后求解

先通过方程相除消去b,得到仅含a的方程,再单独求解:

%i1 eq1: b*8^a = 6;
%i2 eq2: b*18^a = 2;
%i3 eq3: eq1 / eq2; /* 得到 (8/18)^a = 3 */
%o3 (4/9)^a = 3

%i4 solve(eq3, a);
%o4 [a = log(3)/log(4/9)]

%i5 a_val: rhs(first(%));
%i6 b_val: rhs(first(solve(subst(a=a_val, eq1), b)));
%i7 [a_val, b_val], numer;
%o7 [-1.354755645675727, 100.3731396072202]

3. 直接用find_root求数值解

如果只需要数值结果,可直接用find_root指定a的取值范围求解:

%i1 eq_a: (8/18)^a = 6/2;
%i2 a_num: find_root(eq_a, a, -2, 0);
%o2 -1.354755645675727
%i3 b_num: 6 / (8^a_num);
%o3 100.3731396072202

内容的提问来源于stack exchange,提问作者dotnetCarpenter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 05:53:25