Matlab - 如何获得函数的水平曲线的表达式?

时间:2015-06-06 17:15:42

标签: matlab math contour

我想在Matlab环境中获得给定函数z = f(x,y)级别曲线,而不使用countours函数

让Z等于某个常数' c'我们得到一个单级曲线。我想获得y = f(x)形式的结果函数的表达式,以便能够研究它的其他属性。

基本:示例1:简易游戏

让我们考虑为x,y:-10; 10和z = 1绘制z=-x^2-y^2+100的水平曲线的问题。

[X,Y] = meshgrid(-10:.1:10);
Z = -X.^2+-(Y).^2+100;
surf(X,Y,Z)

我们得到下图:

enter image description here

countour函数给了我我想要的东西:

h=[1,1]
contour(X,Y,Z,h)

通过求解关于x

的等式,我可以得到相同的结果
syms x y;
soly = solve(1==-x.^2-y^2+100, y)
t=soly(1)
x=-10:0.1:10;
figure;
plot(x,(99-x.^2).^(1/2));
hold on
plot(x,-(99-x.^2).^(1/2));


soly =

  (99 - x^2)^(1/2)
 -(99 - x^2)^(1/2)

enter image description here

问题:示例2

让我们考虑以下3D功能。

enter image description here

此函数是具有随机中心,方差和峰值的高斯指数的总和。您可以使用以下代码获取它:

%% Random Radial Basis functions in space 
disp('3D case with random path - 10 rbf:');
N = 10 % number of random functions
stepMesh = 0.1;
Z = zeros((XMax-XMin)/stepMesh+1,(XMax-XMin)/stepMesh+1);
[X,Y] = meshgrid(XMin:stepMesh:XMax);
% random variance in [a;b] = [0.3;1.5]
variances = 0.3 + (1.5-0.3).*rand(N,1);
% random amplitude [0.1;1]
amplitudes = 0.1 + (1-0.1).*rand(N,1);
% Random Xcenters in [-XMin;xMax]
Xcenters = XMin+ (XMax-XMin).*rand(N,1);
Ycenters = YMin+ (YMax-YMin).*rand(N,1);

esp=zeros(N,1);
esp=1./(2*(variances).^2);
for i=1:1:N
    disp('step:')
    disp(i)
    Xci=Xcenters(i,1)*ones((XMax-XMin)/stepMesh+1,((XMax-XMin)/stepMesh+1)*2);
    Yci=Ycenters(i,1)*ones((YMax-YMin)/stepMesh+1,((YMax-YMin)/stepMesh+1)*2);
    disp('Radial Basis Function: [amplitude,variance,center]');
    disp(amplitudes(i,1))
    disp(variances(i,1))
    disp(Xcenters(i,1))
    disp(Ycenters(i,1))
    Z = Z + 1*exp(-((X-Xci(:,1:((XMax-XMin)/stepMesh+1))).^2+(Y-Yci(:,((XMax-XMin)/stepMesh+2):((YMax-YMin)/stepMesh+1)*2)).^2)*esp(i,1).^2);
end
surf(X,Y,Z)

countour3函数在三维视图中绘制矩阵Z的等值线图,这非常好,但它并没有给我在2D中表达这些函数。

figure;
contour3(X,Y,Z);
grid on
box on
view([130,30])
xlabel('x-axis')
ylabel('y-axis')
zlabel('z-axis')

enter image description here

问题: 如何获得第二个示例的级别曲线的显式表达式?

0 个答案:

没有答案