matlab求解方程sinx=logx代码

2025-04-15 10:35:23
推荐回答(2个)
回答1:

用 solve('sin(x)-log(x)') 命令可以解得复数解, 如果只需要实数解的话在这里可以用

最简单的二分法. 将下面的程序代码存储为 erfenfa.m 即可运行求解.

程序如下:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function erfenfa
% 本程序实现用二分法求解 sin(x)-log(x) = 0, 也适用于其它比较简单的一元方程
% 二分法介绍之百度百科:
% http://baike.baidu.com/view/75441.htm?fr=aladdin
% 注意这是求解非线性方程的最简单方法, 效率不是最佳的
% 但用于求解本问题比较方便
clc;clear;close all;
xl = 0.2; % 定义求解区域上限
xu = 5; % 定义求解区域下限
yl = equation(xl); yu = equation(xu);

% 绘制求解区域的曲线, 用以判断求解区域设置是否正确
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
x = linspace(xl,xu,100);
y = equation(x);
figure(1); plot(x,y); hold on;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% 以下为迭代求解
for iter=1:1000 % 定义最大迭代步数 1000 步
if(yl*yu>0) % 判断初始求解区域设置是否正确, 如不正确自动退出
disp('求解区域选择不合理');
return;
end
% 二分
xc = (xl+xu)/2;
yc = equation(xc);
if(yl*yc>0)
xl=xc; yl=equation(xc);
else
xu=xc; yu=equation(xc);
end
error = abs(yc);
disp(['iter:',num2str(iter),', error:',num2str(error)]);
if(error<1e-13) break; end % 数值误差小于 1e-13 则结束迭代
end

% 绘制和打印结果
plot(xc,yc,'r*');
disp(['results:'])
disp(['x=',num2str(xc),', y=',num2str(yc)])

end

% 方程定义
function y = equation(x)
y = sin(x) - log(x);
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

回答2:

solve('sin(x)-log(x)')