2014-10-28 3 views
0

Я делаю метод Гаусса-Жордана в MATLAB, и я хочу, чтобы построить эти уравнениякак рисовать x, y, z в matlab?

x + y + 4*z = -1 
-2*x – y + z= -5 
3*x-2*y+3*z=-4 

Чтобы посмотреть в какой точке графика они пересекаются, но я не знаю, как построить в MATLAB

ответ

3

Это вы что искали?

clc 
clear 
close all 

%// Generate x and y values to plot from. 
[x,y] = meshgrid(linspace(0,10,100),linspace(0,10,100)); 

%// Get equation for plane; i.e. z position 
z1 = 0.25.*(-1-x-y); 
z2 = -5+y+2*x; 
z3 = (-4-3.*x+2.*y)./3; 

%// Use surf to generate surface plots 
figure; 

surf(x,y,z1,'linestyle','none','facealpha',0.4) 
hold on 
surf(x,y,z2,'linestyle','none','facealpha',0.4) 
surf(x,y,z3,'linestyle','none','facealpha',0.4) 
hold off 

%// Use to manually rotate the plot 
rotate3d on 

Что дает это:

enter image description here

Вы можете поиграть со свойством 'FaceAlpha', конечно, чтобы сделать вещи более ясными. Посмотрите на функцию surf для получения дополнительных опций.

EDIT: В качестве альтернативы @rayryeng решение решить для х, у и г вы можете использовать mldivide:

A = [1 1 4;-2 -1 1;3 -2 3]; 
B = [-1;-5;-4]; 

X = mldivide(A,B) 

X = 

    1.0000 
    2.0000 
    -1.0000 
+0

+1 - Magnifique! – rayryeng

+0

Merci beaucoup! –

2

Вот как я бы построить эти самолеты. 4-й аргумент surf позволяет указать цвет.

% // create function handles of form z = f(x,y) 
f1 = @(X,Y) 1/4*(-1 - X -Y); 
f2 = @(X,Y) -5 + 2*X + Y; 
f3 = @(X,Y) 1/3*(-4 -3*X + 2*Y); 

% // create a 2d-grid to plot the functions over 
x = linspace(-5, 5, 10); 
y = linspace(-10, 10, 20); 
[X,Y] = meshgrid(x,y); 

% // plot the planes in different colors (4th argument) and without edges 
figure 
surf(X, Y, f1(X,Y), ones(size(f1(X,Y))), 'EdgeColor', 'None'); 
hold on 
surf(X, Y, f2(X,Y), ones(size(f2(X,Y)))*2, 'EdgeColor', 'None'); 
surf(X, Y, f3(X,Y), ones(size(f3(X,Y)))*3, 'EdgeColor', 'None'); 
legend('plane1', 'plane2', 'plane3') 
xlabel('x'), ylabel('y'), zlabel('z') 

enter image description here

2

Хотя это не заговор, возможно, это также то, что вы можете использовать. Если вы хотите, чтобы определить, одновременное решение этих уравнений, рассмотреть вопрос об использовании solve

syms x y z 
A = solve('x + y + 4*z == -1', '-2*x - y + z == -5', '3*x - 2*y + 3*z == -4') 
disp([A.x A.y A.z]); 

[ 1, 2, -1] 

Это будет проверять, правильно ли ваш Гаусс-Жордан. Если вам не нравится использовать solve, вы можете использовать линейную алгебру, чтобы помочь вам решить эту проблему. Просто поместите коэффициенты для своей системы в матрицу и вектор, затем найдите обратную матрицу и умножьте ее на вектор.

A = [1 1 4; -2 -1 1; 3 -2 3]; 
b = [-1;-5;-4]; 
x = A \ b 

x = 

1.0000 
2.0000 
-1.0000 

... и даже другой способ заключается в использовании rref уменьшить вашу систему в строке восстановленной формы ступенчатой. Это было бы результатом после успешного применения исключения Гаусса-Иордана в вашей линейной системе. Таким образом:

A = [1 1 4; -2 -1 1; 3 -2 3]; 
b = [-1;-5;-4]; 
rref([A b]) 


ans = 

1  0  0  1 
0  1  0  2 
0  0  1 -1 

Чтение ответ выше, x = 1, y = 2, z = -1. Это представляет собой расширенную систему, в которой первые 3 столбца обозначают коэффициенты вашей системы, а четвертый столбец обозначает правую часть вашей линейной системы уравнений.

+1

Приятный я не знал о решении! Незначительное примечание: в первом уравнении правая часть равна -1 вместо 1 :) –

+1

@ Benoit_11 - Merci :) Je viens de correcter. – rayryeng

Смежные вопросы