Shading with vertical lines

4 visualizzazioni (ultimi 30 giorni)
Ikenna Iwudike
Ikenna Iwudike il 24 Apr 2022
Commentato: Ikenna Iwudike il 25 Apr 2022
I'm trying to shade the region over which the integral extends with vertical lines. This is my integral:
F = @(x,y) x.*y;
ymin = @(x) x.^2;
ymax = @(x) x;
q = integral2(F,0,1,ymin,ymax)
The code below produces a graph with vertical line shading over its region. This is an example of what i'm trying to do.
f = @(x) sin(x + 1); g = @(x) x.^3 - 3*x + 1;
fplot(f, [-3, 3]), hold on
fplot(g, [-3, 3], 'LineWidth', 2)
>> x1 = fzero(@(x) f(x) - g(x), -2);
x2 = fzero(@(x) f(x) - g(x), 0);
x3 = fzero(@(x) f(x) - g(x), 2);
>> xcoord = linspace(x1, x3, 10);
ycoord = [f(xcoord); g(xcoord)];
plot([xcoord;xcoord], ycoord), hold off
  5 Commenti
Ikenna Iwudike
Ikenna Iwudike il 25 Apr 2022
Yea, let me see how a surface plot would look. Also yes I was talking about the first block.
Rik
Rik il 25 Apr 2022
See if my edited answer works for you. The loop can be optimized to plot all stems as a single object, but I first wanted to create it like this.

Accedi per commentare.

Risposta accettata

Rik
Rik il 25 Apr 2022
Modificato: Rik il 25 Apr 2022
I have put some inefficient code at the start to integrate over y so you end up with a function of x alone. I then used the same g function as you used in your second block. Is this what you mean?
F = @(x,y) x.*y;
ymin = @(x) x.^2;
ymax = @(x) x;
f_base =@(x) integral(@(y) F(x,y),ymin(x),ymax(x));
f=@(x) arrayfun(f_base,x);
g = @(x) x.^3 - 3*x + 1;
fplot(f, [-2, 2]), hold on
fplot(g, [-2, 2], 'LineWidth', 2)
x1 = fzero(@(x) f(x) - g(x), -2);
x2 = fzero(@(x) f(x) - g(x), 0);
x3 = fzero(@(x) f(x) - g(x), 2);
xcoord = linspace(x1, x3, 100);
ycoord = [f(xcoord); g(xcoord)];
plot([xcoord;xcoord], ycoord,'k'), hold off
If you want to plot a surface, you can use surf. plot3 will allow you to plot a line in a 3D axes.
F = @(x,y) x.*y;
ymin = @(x) x.^2;
ymax = @(x) x;
[X,Y]=ndgrid(linspace(0,1,100));
Y(Y<ymin(X))=NaN;
Y(Y>ymax(X))=NaN;
Z=F(X,Y);
surf(X,Y,Z)
Az=-5;El=65;view(Az,El) % set azimuth and elevation
hold on
for n=1:numel(Z)
if isnan(Z(n)),continue,end
plot3(X(n)*[1 1],Y(n)*[1 1],[0 Z(n)],'k')
end

Più risposte (0)

Categorie

Scopri di più su Graphics Performance in Help Center e File Exchange

Prodotti


Release

R2021a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by