Nhờ giúp vẽ đồ thị và tìm nghiệm phương trình trong Matlab

  • Thread starter tinhnv92
  • Ngày mở chủ đề
T

tinhnv92

Author
chào mọi người, nhờ các pro giải bài tập này giúp em. vẽ đồ thị và tìm nghiêm của phương trinh y=x^4+4*x^3+4*x^2+6*x+7 trong matlad!!!!. em xin cám ơn
 
Ðề: đồ họa trong matlad

Đây là lệnh tìm nghiệm nha:
>> p=[1 4 4 6 7];
>> r=roots(p)

r =

-3.0988
0.2014 + 1.3007i
0.2014 - 1.3007i
-1.3040


Đây là lệnh vẽ:
>> x = -100:0.01:100;
>> y=1*x.^4+4*x.^3+4*x.^2+6*x+7;
>> plot (x, y, 'DisplayName', 'y vs x', 'XDataSource', 'x', 'YDataSource', 'y'); figure(gcf)
 
Last edited:
O

Orchidd

Author
Ðề: Nhờ giúp vẽ đồ thị và tìm nghiệm phương trình trong Matlab

Anh chị có thể chỉ giúp em vẽ các đồ thị như hình dưới đây bằng Matlab như thế nào không ạ? Làm sao để vẽ các dot, các đoạn nối các dot đó với trục tung, hoành?


 

mori

Member
Ðề: Nhờ giúp vẽ đồ thị và tìm nghiệm phương trình trong Matlab

X=[0:0.5:10];
Y=sin(X);y=size(Y);
figure(1)
plot(X,Y,'.r'),axis equal
hold on;
plot([X;X],[zeros(y);Y],'b');hold on;
plot([min(X); max(X)],[0,0]);
X=[0:0.5:10]; % chia các điểm trên trục X
Y=sin(X);y=size(Y); % Tính hàm y, và kích thước (số lượng điểm) Y
figure(1) % Hình số 1
plot(X,Y,'.r'),axis equal % vẽ đồ thị của hàm Y đối số X, với tỉ lệ trục bằng nhau. sử dụng dấu . để vẽ. Bạn có thể tham khảo thêm các kí hiệu dấu ở đây: http://www.mathworks.com/help/techdoc/learn_matlab/f3-27853.html
hold on; % giữ nguyên ảnh đã in để thực hiện lệnh in tiếp theo phía dưới
plot([X;X],[zeros(y);Y],'b');hold on; % vẽ các đường gióng bằng cách vẽ các vecto nối 2 điểm có hoành độ [x1;x2] và tung độ [y1;y2], lệnh này nối y1 (có đối số tương ứng là x1) với y2 (có đối số tương ứng là x2), như vậy x1 và x2 có thể lấy là tập hợp các điểm X đã được chia trên trục OX, y1 có thể lấy là tập hợp các điểm 0, y2 lấy là tập hợp các điểm giá trị hàm. Tức là nối từ 0 đến giá trị hàm, với các vị trí tương ứng.
plot([min(X); max(X)],[0,0]); % In trục OY từ min của X đến max của X (tương tự lệnh plot ở trên nhưng là vẽ cho 2 điểm, lệnh trên thì vẽ cho nhiều điểm)

Bạn tự thêm gia vị cho các trục như ở link trên hướng dẫn nhé
 
Last edited:
Q

quocdung13

Author
Ðề: Nhờ giúp vẽ đồ thị và tìm nghiệm phương trình trong Matlab

mọi người cho mình hỏi, vd giải phương trình bậc 2 ra được nghiệm, rồi từ nghiệm đó mình đi vẽ đồ thị ptb2 thì làm cách nào vậy?
 
Ðề: Nhờ giúp vẽ đồ thị và tìm nghiệm phương trình trong Matlab

Để vẽ đồ thị phương trình bậc 2 vd ax^2+bx+c=0, bạn cho các giá trị của x từ x1-->x2 sao cho 2 nghiệm nằm trong khoảng x1-->x2, bạn tìm được các giá trị y=ax^2+bx+c tương ứng. Nghiệm của phương trình là giao giữa đường Oy và đồ thị bậc 2.
 
Q

quocdung13

Author
Ðề: Nhờ giúp vẽ đồ thị và tìm nghiệm phương trình trong Matlab

Để vẽ đồ thị phương trình bậc 2 vd ax^2+bx+c=0, bạn cho các giá trị của x từ x1-->x2 sao cho 2 nghiệm nằm trong khoảng x1-->x2, bạn tìm được các giá trị y=ax^2+bx+c tương ứng. Nghiệm của phương trình là giao giữa đường Oy và đồ thị bậc 2.
cám ơn bạn, mình đã làm được rồi!
vd, mình có một nút clear, để mà xóa tất cả những giá trị của hệ số a,b,c đã nhập trước đó, thì code như thế nào thế bạn?
hay là nút close, dùng để đóng chương trình luôn!
 
Ðề: Nhờ giúp vẽ đồ thị và tìm nghiệm phương trình trong Matlab

Ý bạn là sao nhỉ, tức là đoạn code để xóa màn hình và bộ nhớ ghi lại các giá trị tính toán trên matlab hả. Bạn thử đoạn này xem
 
Q

quocdung13

Author
Ðề: Nhờ giúp vẽ đồ thị và tìm nghiệm phương trình trong Matlab

Để vẽ đồ thị phương trình bậc 2 vd ax^2+bx+c=0, bạn cho các giá trị của x từ x1-->x2 sao cho 2 nghiệm nằm trong khoảng x1-->x2, bạn tìm được các giá trị y=ax^2+bx+c tương ứng. Nghiệm của phương trình là giao giữa đường Oy và đồ thị bậc 2.
từ 2 nghiệm x1, x2, mình tính ra được 2 nghiệm y1, y2 mình viết như vậy:

y1=(a*((x1)^2))+(b*(x1))+c;
y2=(a*((x2)^2))+(b*(x2))+c;
set(handles.nghiem_y1,'string',y1);
set(handles.nghiem_y2,'string',y2);

để tìm 2 điểm, rồi vẽ đồ thị với 2 điểm đó, mà hình như là sai rồi!
với lại, nếu mình muốn biểu thị 2 điểm trên đồ thị, chẳng hạn, dấu x, rồi A(x1,y1) được không?
 
Ðề: Nhờ giúp vẽ đồ thị và tìm nghiệm phương trình trong Matlab

VD nhé bạn: 2 nghiệm là -2 và 3 chẳng hạn
Thì bạn lấy khoảng của x là chạy từ -5 đến 5, lấy trong khoảng đó các điểm: linspace(-5,5,15); % 15 là số điểm bạn muốn
Sau đó bạn tính giá trị các y tương ứng: y=x.^2*a+x.*b+c;
Sau đó bạn in : plot(x,y,'x-r'); axis equal
 
Last edited:
Ðề: Nhờ giúp vẽ đồ thị và tìm nghiệm phương trình trong Matlab

Chào mọi người.
Em muốn vẽ mặt 3D trong Matlab và làm như thế này.
>> x=0:0.1:pi/2;
>> y=0:0.1:pi/2;
>> [x,y]=meshgrid(x,y);
>> p1=0.74;
>> p2=1.2;
>> p3=2;
>> p4=5;
>> p5=1.2;
>> p6=1.2;
>> p7=1.2;
>> l=700;
>> a=100;
>> x1k=70;
>> x2k=140+0.5*l*sin(x);
>> x3k=202+l*sin(x);
>> x4k=265+l*sin(x);
>> x5k=90+0.5*l*sin(x);
>> x16=-(p7+4*(p1*x1k+p2*x2k+p3*x3k+p4*x4k+p5*x5k))*sin(y)/(2*a*(sqrt(3)*cos(y)-sin(y)));
>> surf(x,y,x16);
Thì kết quả:
[ANH]FFD6_50E99817[/ANH]
Em không biết cách xử lý lỗ "Warning: Matrix is singular to working precision." như thế nào.
Khi em thử với hàm đơn giản thì vẩn ok
 
Ðề: Nhờ giúp vẽ đồ thị và tìm nghiệm phương trình trong Matlab

Mình không nhớ cách viết tắt của lệnh nhân từng phần tử trong ma trận nữa. Nhưng bạn nên cho vòng lặp chạy để gọi các vị trí trong ma trận rồi nhân. Vì trong công thức của bạn hỗn hợp các ma trận, rồi các số đơn, nên kết quả x16 của bạn tại các phần tử là NaN not a number.

Bạn thử vòng lặp này nhé:

x=0:0.1:pi/2;
y=0:0.1:pi/2;
[x,y]=meshgrid(x,y);
p1=0.74;
p2=1.2;
p3=2;
p4=5;
p5=1.2;
p6=1.2;
p7=1.2;
l=700;
a=100;
x1k=70;
x2k=140+0.5*l*sin(x);
x3k=202+l*sin(x);
x4k=265+l*sin(x);
x5k=90+0.5*l*sin(x);
x16=zeros(size(x,1),size(x,1));
for i=1:size(x,1)
for j=1:size(x,1)
x16(i,j)=-(p7+4*(p1*x1k+p2*x2k(i,j)+p3*x3k(i,j)+p4*x4k(i,j)+p5*x5k(i,j)))*sin(y(i,j))/(2*a*(sqrt(3)*cos(y(i,j))-sin(y(i,j))));
end
end
surf(x,y,x16);
Nên làm từ đơn giản đến phức tạp, khi nào bạn nắm chắc các cách viến ngắn ngọn thì hãy viết
 
Ðề: Nhờ giúp vẽ đồ thị và tìm nghiệm phương trình trong Matlab

Mình không nhớ cách viết tắt của lệnh nhân từng phần tử trong ma trận nữa. Nhưng bạn nên cho vòng lặp chạy để gọi các vị trí trong ma trận rồi nhân. Vì trong công thức của bạn hỗn hợp các ma trận, rồi các số đơn, nên kết quả x16 của bạn tại các phần tử là NaN not a number.

Bạn thử vòng lặp này nhé:



Nên làm từ đơn giản đến phức tạp, khi nào bạn nắm chắc các cách viến ngắn ngọn thì hãy viết
x=0:0.1:pi/2;y=0:0.1:pi/2;
[x,y]=meshgrid(x,y);
p1=0.74;
p2=1.2;
p3=2;
p4=5;
p5=1.2;
p6=1.2;
p7=1.2;
l=700;
a=100;
x1k=70;
x2k=140+0.5*l*sin(x);
x3k=202+l*sin(x);
x4k=265+l*sin(x);
x5k=90+0.5*l*sin(x);
x17=-(p7+4*(p1*x1k+p2*x2k+p3*x3k+p4*x4k+p5*x5k)).*sin(y)./(2*a*(sqrt(3)*cos(y)-sin(y)));
x16=zeros(size(x,1),size(x,1));
for i=1:size(x,1)
for j=1:size(x,1)
x16(i,j)=-(p7+4*(p1*x1k+p2*x2k(i,j)+p3*x3k(i,j)+p4*x4k(i,j)+p5*x5k(i,j)))*sin(y(i,j))/(2*a*(sqrt(3)*cos(y(i,j))-sin(y(i,j))));
end
end
figure(1)
surf(x,y,x16);
figure(2)
surf(x,y,x17);
hai đồ thị cho hai cách viết.
 
N

nghiabkdn

Author
Các anh cho em hỏi: Làm thế nào để vẽ đường thẳng song song với trục tung (ví dụ: x=8) trong Matlab vậy ạ??
 
Top