現在この質問をフォロー中です
- フォローしているコンテンツ フィードに更新が表示されます。
- コミュニケーション基本設定に応じて電子メールを受け取ることができます。
Surf a function with different values
2 ビュー (過去 30 日間)
古いコメントを表示
I'm trying to surf a function f that takes 2 values: 1 if (x,y) is in A and 2 if (x,y) is in B. How can I do that? I attach also a drawing for x,y.
採用された回答
Torsten
2023 年 5 月 21 日
Define the function as
f = @(x,y) (y>=2*x) + 2*(y<2*x);
and make a surface plot.
17 件のコメント
Alexandra Roxana
2023 年 5 月 21 日
編集済み: Alexandra Roxana
2023 年 5 月 21 日
But the function doesn't depend on x and y. It is a constant function. And I want to go further with more triangles dividing the domain. And to make it have a different value within each triangle.
Torsten
2023 年 5 月 21 日
編集済み: Torsten
2023 年 5 月 21 日
The function has exactly the values you want:
f = @(x,y) (y>=2*x) + 2*(y<2*x);
f(0,1)
ans = 1
f(1,0)
ans = 2
But I admit: Defining a function with prescribed values on each triangle of a triangulation will soon become a hard job. And I really don't understand what it should be good for ...
Alexandra Roxana
2023 年 5 月 21 日
I've been thinking of this problem for weeks and can't seem to come to some results.
Alexandra Roxana
2023 年 5 月 21 日
編集済み: Alexandra Roxana
2023 年 5 月 21 日
Long story short: I want to calculate the pressure on each triangle from the red domain. The left-hand side of the formula is the pressure on each triangle; the right-hand side is the sum of values of each node from the triangle. The thing is the pressure is constant on each triangle and it has to look like that in the surf. Before it looked like a continuous function which isn't right. And I wanted at first to begin with a simple example.
Torsten
2023 年 5 月 21 日
f = @(x,y) (y>=2*x) + 2*(y<2*x);
x = linspace(0,1,100);
y = linspace(0,2,100);
[X,Y] = ndgrid(x,y);
surf(X,Y,f(X,Y))
shading interp
colorbar
Alexandra Roxana
2023 年 5 月 22 日
It looks really good but there's a slight problem: what can I modify so I can see only the two triangles in the figure? It must look like a jump from 1 to 2.
Torsten
2023 年 5 月 22 日
Or:
f = @(x,y) (y>=2*x) + 2*(y<2*x);
x = linspace(0,1,100);
y = linspace(0,2,100);
[X,Y] = ndgrid(x,y);
contourf(X,Y,f(X,Y))
colorbar
Alexandra Roxana
2023 年 5 月 22 日
No, it has to look like the first one without the middle part, in 3D also.
Alexandra Roxana
2023 年 5 月 22 日
Probably the function has to be modified, I momentarily don't see how.
Torsten
2023 年 5 月 22 日
You might want to play with this representation:
x1 = [0,0,1];
y1 = [0,2,2];
z1 = [1,1,1];
x2 = [0,1,1];
y2 = [0,0,2];
z2 = [2,2,2];
hold on
s1 = fill3(x1,y1,z1,'r');
s2 = fill3(x2,y2,z2,'b');
hold off
view(25,45)
zlim ([0 3])
rotate(s1,[0 0 1],180)
rotate(s2,[0 0 1],180)
Alexandra Roxana
2023 年 5 月 23 日
編集済み: Alexandra Roxana
2023 年 5 月 23 日
Unfortunately that's not going to help me very much because I want to go further and do the same thing but with more triangles like in this case and in each triangle the function to have a different value:
Torsten
2023 年 5 月 23 日
Alexandra Roxana
2023 年 5 月 23 日
編集済み: Alexandra Roxana
2023 年 5 月 23 日
Thank you for all your help!
Alexandra Roxana
2023 年 5 月 27 日
The method from the link seems to work; however I'm a bit confused with the values of n1, n2 and n3. I don't know what values I should put: if I put [1,1,1] the first coordinates are different, the rest is the same as should be. So I'm guessing the choice of n1, n2 and n3 is wrong.
その他の回答 (0 件)
参考
カテゴリ
Help Center および File Exchange で Surface and Mesh Plots についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!エラーが発生しました
ページに変更が加えられたため、アクションを完了できません。ページを再度読み込み、更新された状態を確認してください。
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom(English)
アジア太平洋地域
- Australia (English)
- India (English)
- New Zealand (English)
- 中国
- 日本Japanese (日本語)
- 한국Korean (한국어)