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

MATLAB求解p关于x的函数遇Empty sym问题,求数值解法及绘图

解决MATLAB超越方程数值求解及绘图问题

问题原因

你的方程是包含指数项和根号项的超越方程,不存在解析解,所以syms+solve会返回空符号结果,必须用数值方法对每个x值求解对应的p。

数值求解步骤及代码

实现思路

  • 预定义所有常量参数;
  • 生成一组合理的x取值点;
  • 对每个x,构造关于p的匿名函数,用fzero求解方程的根(需指定合适的初始猜测值);
  • 收集所有p值后绘制关系曲线。

完整代码

% 定义所有常量参数
b = 2.49e-10;
T = 400;
D = 23e-6;
D_Cu = 2.88e-4 * exp(-32571.56/T);
D_Ni = 0.68e-4 * exp(-31392.83/T);
D_v = 0.647*D_Cu + 0.3196*D_Ni; % Darken方程计算结果

% 生成x的取值范围(可根据实际需求调整,示例取x从0到1e-8,步长1e-10)
x = linspace(0, 1e-8, 100);
p = zeros(size(x)); % 预分配p的存储空间

% 遍历每个x,数值求解对应的p
for i = 1:length(x)
    % 构造关于p的匿名函数,令f(p)=0
    f = @(p_val) 5e8*x(i) + (2/b)*(sqrt(p_val) + 1/D) - (5.58e15 * exp(-15.0234 + 150*b*sqrt(p_val)) * p_val)/44;
    % 用fzero求解,初始猜测值设为1(可根据实际情况调整,确保函数在该点附近有根)
    p(i) = fzero(f, 1);
end

% 绘制p-x关系曲线
figure;
plot(x, p, 'LineWidth', 1.5);
xlabel('x');
ylabel('p');
title('p与x的关系曲线');
grid on;

注意事项

  • 初始值选择:fzero需要初始猜测值,示例中用1,若求解报错,可尝试调整初始值(比如0.1、10等),确保函数在该值附近符号变化(存在根);
  • x的取值范围:如果x取值过大,方程可能无解,需根据物理意义或试算确定合理范围;
  • 异常处理:可加入try-catch块避免个别x值求解失败导致程序中断,示例代码:
try
    p(i) = fzero(f, 1);
catch
    p(i) = NaN; % 标记无解的点
end

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 21:52:40