WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Ansatzfunktionen

 

p1rlo
Forum-Anfänger

Forum-Anfänger


Beiträge: 34
Anmeldedatum: 08.07.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.10.2016, 10:42     Titel: Ansatzfunktionen
  Antworten mit Zitat      
Hallo Leute,
ich hoffe es geht euch gut!
ich habe eine Funktion geschrieben, die Ansatzfunktionen darstellen bzw speichern soll.

Der code sieht so aus:


Code:
function [a]= shape_functions
global h_1 h_2 h_3 h_4 h_5 h_6 h_7 h_8 h_9

s= -1:1:1;
r= -1:1:1;

h_9=(1-r.^2).*(1-s.^2);
h_8=0.5*(1-s.^2).*(1+r)-0.5.*h_9;
h_7=0.5*(1-r.^2).*(1-s)-0.5.*h_9;
h_6=0.5*(1-s.^2).*(1-r)-0.5.*h_9;
h_5=0.5*(1-r.^2).*(1+s)-0.5.*h_9;
h_4=0.25*(1+r).*(1-s)-0.5.*h_7-0.5.*h_8-0.25.*h_9;
h_3=0.25*(1-r).*(1-s)-0.5.*h_6-0.5.*h_7-0.25.*h_9;
h_2=0.25*(1-r).*(1+s)-0.5.*h_5-0.5.*h_6-0.25.*h_9;
h_1=0.25*(1+r).*(1+s)-0.5.*h_5-0.5.*h_8-0.25.*h_9;


a=[h_1;h_2 ;h_3 ;h_4 ;h_5 ;h_6 ; h_7 ;h_8 ;h_9]
 


Theoretisch sollte die Funktion eine 9x9 Matrix speichern, da sowohl r als auch s zwischen -1 und 1 laufen mit mit 1 Sprüngen. Leider speichert Matlab lediglich eine 3x9 Matrix ab für
r=-1 & s=-1
r=0 & s=0
r=1 & s=1

wie kann ich das so umformen, dass die funktion alle schritte für r und s abspielt?

Ich hoffe es war verständlich und ihr könnt mir helfen.

Liebe grüße

[EDITED, Jan, Bitte Code-Umgebung verwenden - Danke!]
Private Nachricht senden Benutzer-Profile anzeigen


p1rlo
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 34
Anmeldedatum: 08.07.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.10.2016, 11:02     Titel:
  Antworten mit Zitat      
Kleines Update,
ich habe mit dem Befehl:

[rr,ss]=meshgrid(r,s)

es geschafft, dass alle kombinationen von r und s benutzt werden. nur wird zum schluss eine 3x27 matrix gespeichert. ich brauche aber eine 9x9 matrix.

Liebe grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 31.10.2016, 12:14     Titel:
  Antworten mit Zitat      
Hallo,

warum setzt du die h_i global?

Wie soll die 9x9-Matrix zusammengesetzt sein?

Du hast ja lauter 3x3-Matrizen. Die kannst du mit , und ; nach Belieben unter- oder nebeneinander setzen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
p1rlo
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 34
Anmeldedatum: 08.07.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.10.2016, 12:23     Titel:
  Antworten mit Zitat      


Zuletzt bearbeitet von p1rlo am 31.10.2016, 12:24, insgesamt einmal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen
 
p1rlo
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 34
Anmeldedatum: 08.07.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.10.2016, 12:24     Titel:
  Antworten mit Zitat      
Hallo Harald,
warum ich die h_i's global setze, kann ich dir nicht beantworten, ich musste die Variablen zu beginn deklarieren und naja, diesen Befehl habe ich dann gefunden.

zum schluss hätte ich gerne eine 9x9 Matrix, die mir in abhängigkeit von r und s die werte für h_i ausspuckt.. in etwa so:

r s r s r s ..... r s
0 0 0 ..... 1
0 0 1 ..... 0
1 0 0 ..... 0
0 0 0 ..... 0
0 0 0 ..... 0
0 1 0 ..... 0
0 0 0 ..... 0
0 0 0 ..... 0
0 0 0 ..... 0

Liebe grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 31.10.2016, 12:37     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
ich musste die Variablen zu beginn deklarieren

Nein, musst du nicht.

Zitat:
r s r s r s ..... r s
0 0 0 ..... 1

Wird die Anzahl der Spalten so nicht gerade? Wie werden die 0 und 1 aus h_i bestimmt?

Du kannst z.B. so eine 9x9-Matrix erzeugen:
Code:
a=[h_1,h_2 ,h_3 ;h_4 ,h_5 ,h_6 ; h_7 ,h_8 ,h_9]


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
p1rlo
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 34
Anmeldedatum: 08.07.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.10.2016, 12:53     Titel:
  Antworten mit Zitat      
Hallo,
okay, habe jetzt den befehl "global" auskommentiert und es funktioniert trotzdem - vielen dank dafür.

also diese ansatzfunktionen h_i ergeben immer 1 für eine bestimmte kombination von r und s und 0 für alle anderen kombinationen.

es gibt 9 verschiedene kombinationen von r und s (wenn die schrittweite 1 ist) und dementsprechend für jedes h_i ebenfalls 9 ergebnisse.
zum schluss müsste die matrix dann so aussehen:
000000001
001000000
100000000
000000100
000001000
010000000
000100000
000000010
000010000

mein problem ist jetzt, dass jede zeile der matrix ja das h_i darstellen soll, aber wie bereits erwähnt ist jedes h_i eine 3x3 matrix, sollte aber eine 1x9 matrix sein.

PS mein code sieht momentan so aus:
Code:
function [a]= shape_functions
%global h_1 h_2 h_3 h_4 h_5 h_6 h_7 h_8 h_9

r= -1:1:1;
s= -1:1:1;

[rr,ss]=meshgrid(r,s)
h_9=(1.-rr.^2).*(1.-ss.^2)
h_8=0.5*(1.-ss.^2).*(1.+rr)-0.5*h_9
h_7=0.5*(1.-rr.^2).*(1.-ss)-0.5*h_9
h_6=0.5*(1.-ss.^2).*(1.-rr)-0.5*h_9
h_5=0.5*(1.-rr.^2).*(1.+ss)-0.5*h_9
h_4=0.25*(1.+rr).*(1.-ss)-0.5*h_7-0.5*h_8-0.25*h_9
h_3=0.25*(1.-rr).*(1.-ss)-0.5*h_6-0.5*h_7-0.25*h_9
h_2=0.25*(1.-rr).*(1.+ss)-0.5*h_5-0.5*h_6-0.25*h_9
h_1=0.25*(1+rr).*(1+ss)-0.5*h_5-0.5*h_8-0.25*h_9

a=[h_1,h_2 ,h_3 ;h_4 ,h_5 ,h_6 ; h_7 ,h_8 ,h_9]
 


Liebe grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
p1rlo
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 34
Anmeldedatum: 08.07.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.10.2016, 13:23     Titel:
  Antworten mit Zitat      
Hallo an alle, Hallo Harald,

ich habe jetzt die Lösung gefunden.
Code:
function [a]= shape_functions
%global h_1 h_2 h_3 h_4 h_5 h_6 h_7 h_8 h_9

r= -1:0.5:1;
s= -1:0.5:1;

[rr,ss]=meshgrid(r,s)
h_9=(1.-rr.^2).*(1.-ss.^2);
h_8=0.5.*(1.-ss.^2).*(1.+rr)-0.5*h_9;
h_7=0.5.*(1.-rr.^2).*(1.-ss)-0.5*h_9;
h_6=0.5.*(1.-ss.^2).*(1.-rr)-0.5*h_9;
h_5=0.5.*(1.-rr.^2).*(1.+ss)-0.5*h_9;
h_4=0.25.*(1.+rr).*(1.-ss)-0.5*h_7-0.5*h_8-0.25*h_9;
h_3=0.25.*(1.-rr).*(1.-ss)-0.5.*h_6-0.5.*h_7-0.25*h_9;
h_2=0.25.*(1.-rr).*(1.+ss)-0.5*h_5-0.5*h_6-0.25*h_9;
h_1=0.25.*(1.+rr).*(1.+ss)-0.5.*h_5-0.5.*h_8-0.25.*h_9;

% for i 1:1:9;
%     h_i=h_i';
%     h_i=h_i( : );
%     h_i=h_i';
% end

h_9=h_9';
h_9=h_9( : );
h_9=h_9'

h_8=h_8';
h_8=h_8( : );
h_8=h_8';

h_7=h_7';
h_7=h_7( : );
h_7=h_7';

h_6=h_6';
h_6=h_6( : );
h_6=h_6';

h_5=h_5';
h_5=h_5( : );
h_5=h_5';

h_4=h_4';
h_4=h_4( : );
h_4=h_4';

h_3=h_3';
h_3=h_3( : );
h_3=h_3';

h_2=h_2';
h_2=h_2( : );
h_2=h_2';

h_1=h_1';
h_1=h_1( : );
h_1=h_1';


a=[h_1; h_4; h_3 ; h_2 ; h_8 ; h_7 ; h_6 ; h_5 ; h_9]
 


so wird die Matrix richtig dargestellt. Eine weitere Frage habe ich wegen der for-schleife. ich habe sie auskommentiert weil die so nicht ging. liegt es daran, dass matlab nicht erkennt, dass h_i für i=1 h_1 sein soll?

Liebe grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 31.10.2016, 15:24     Titel:
  Antworten mit Zitat      
Hallo,

durchnummerierte Variablen sind generell keine gute Idee.
Stattdessen kann man ein Cell Array verwenden; Lese- und Schreibzugriff erfolgen dann mit
Code:


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.