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
相关产品推荐
相关产品推荐

