Replace the elements of a matrix under specific conditions

3 ビュー (過去 30 日間)
Camilo Granda
Camilo Granda 2017 年 10 月 7 日
コメント済み: Camilo Granda 2017 年 10 月 7 日

I have an Esi matrix and want to replace it by the following parameters:

  • if the values of Esi are greater or equal than f_y/Es replace the values with f_y
  • if the values of Esi are lesser or equal than -f_y/Es replace the values with -f_y
  • and for the values in between -f_y/Es<Esi<+f_y/Es i want to replace them by: Esi*Es

So long I have this:

fsi=zeros(size(Esi));
fsi(Esi>=f_y/Es)=f_y;
fsi(Esi<=-f_y/Es)=-f_y;
fsi(-f_y/Es<Esi<f_y/Es)=Esi*Es;

But is not working.

採用された回答

Image Analyst
Image Analyst 2017 年 10 月 7 日
You can't do this
-f_y/Es < Esi < f_y/Es
You need to do it in two steps, like (-f_y/Es < Esi) & (Exi < f_y/Es). So try this:
fsi=zeros(size(Esi));
fsi(Esi>=f_y/Es)=f_y;
fsi(Esi<=-f_y/Es)=-f_y;
fsi((-f_y/Es < Esi) & (Exi < f_y/Es)) = Esi * Es;
Or perhaps a little more readable and less cryptic for people reading your code.
fsi = zeros(size(Esi));
indexesToReplace = Esi >= f_y/Es;
fsi(indexesToReplace) = f_y;
indexesToReplace = Esi <= -f_y/Es;
fsi(indexesToReplace) = -f_y;
indexesToReplace = (-f_y/Es < Esi) & (Exi < f_y/Es);
fsi(indexesToReplace) = Esi * Es;

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeTables についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by