普通会员

叫我巅哥

此用户很神秘,没有留下任何信息

1帖子
0回复
18积分
ID:018007
自己写了一个函数,利用contour函数,可以实现隐函数绘图

function   h=implicit_fplot(f, xlims, ylims, options)
% 输入:
%   f: 函数句柄 @(x,y)
%   xlims: [xmin, xmax]
%   ylims: [ymin, ymax]
%   options: 结构体或名称-值对,可选参数
% 输出:
%   h: 图形句柄
% 默认参数
defaults.N = 300;
defaults.LineWidth = 2;
defaults.LineStyle = '-'; % MATLAB默认蓝实线
defaults.Level = 0; %这个不能改,绘制f(x,y)=0的图像
defaults.Axes = gca;
defaults.Hold = false;
% 合并参数
if nargin < 4
options = struct();
elseif isstruct(options)
% options已经是结构体
else
% 将名称-值对转换为结构体
options = struct(options{:});
end
% 应用默认值
fields = fieldnames(defaults);
for i = 1:length(fields)
if ~isfield(options, fields{i})
options.(fields{i}) = defaults.(fields{i});
end
end
% 获取当前坐标轴
ax = options.Axes;
if ~options.Hold
cla(ax);
hold(ax, 'off');
end
% 创建网格
x = linspace(xlims(1), xlims(2), options.N);
y = linspace(ylims(1), ylims(2), options.N);
[X, Y] = meshgrid(x, y);
% 计算函数值
Z = f(X, Y);
contour( X, Y, Z,[options.Level, options.Level],...
options.LineStyle,...
'LineWidth', options.LineWidth)
% 设置坐标轴
xlim(ax, xlims);
ylim(ax, ylims);
axis(ax, 'equal');
grid(ax, 'on');
box(ax, 'on');
xlabel(ax, 'x');
ylabel(ax, 'y');
% 设置标题
s1=func2str(f);
s1(1:6)=[];
title(strcat(s1,'=0'));
hold(ax, 'on');
end


测试

F = @(x,y) x.^2+y.^2-1


options.LineStyle='r--'


implicit_fplot(F, [-1 1], [-1 1],options)

屏幕截图 2026-02-09 124107.png


0 2026-02-09