2010-12-14 5 views
0

Y at-il un fichier intégré/m dans Matlab pour obtenir les fluctuatiing et très multiples pics du tracé d'une fonction alpine ? Je veux obtenir un figure similaire en 3D qui est! alt text et alt textComment tracer parcelle de surface

La formule (probablement) est

z = sin (x1) sin (x2) \ sqrt {x1x2}

Comment peut-on tracer une parcelle de surface pour les fonctions principales aiment l'alpine, le rosenbrock, la fonction de caisse d'oeufs etc. d'une manière illustrative colorée. Veuillez aider avec un exemple de code.

+0

Suivez simplement l'exemple de http://www.mathworks.com/help/techdoc/ref/surf.html – Mikhail

Répondre

0

Eh bien, vous devez créer un meshgrid choisir l'échantillonnage à droite (dans cet exemple de -5 à 5 avec une étape de 0,1). En Z mettre la formule de votre fonction Z = f (X, Y)

X=[-5:0.1:5]; %% The X-axis goes from the value of -5 to +5 with a step of 0.1 (100 points) 
Y=[-5:0.1:5]; %% like the X-axis 
[wx,wy]=meshgrid(X,Y); %% see [MATLAB documentation][1] 
Z=sinc(sqrt((wx-5).^2+wy.^2)); %% this is an example formula, substitute it with YOUR formula 
fig=surfl(wx,wy,Z); %% make a surface plot with lighting 
shading interp; %% optional, try to remove it. 
colormap hot; %% here you decide the colormap: hot is the one going from white to red 
view(45,40) %% optional, select the angle of view 

Si vous voulez une couleur significative juste étudier la fonction colormap, il est très simple.

+0

Il serait d'une aide immense si vous pouviez déchiffrer votre code avec quelques commentaires, je suis incapable de le suivre. – Sm1

1

cela peut ne pas être la réponse que vous cherchez, mais je pensais que ce pourrait vous aider

i face au même problème quand je devais tracer la courbe de survie Kaplan Meier programme

ce que nous avons fait (moi et mon équipe) a d'abord été en obtenant la formule puis nous avons construit une datable qui utilisait cette formule.

datatable une fois formé était le pour datasource contrôle graphique où vous pouvez modifier la sortie visuelle préférée.

regardez le code ci-dessous (c'est seulement une partie de celui-ci) pour avoir une idée. si vous avez besoin du code plus s'il vous plaît laissez-moi savoir

'Start generating the life tables 

Dim myTable As New DataTable 

myTable.Columns.Add("Survial Status") 
myTable.Columns.Add("Remaining Patients") 
myTable.Columns.Add("Survial Duration") 
myTable.Columns.Add("Survial Propability") 
myTable.Columns.Add("Cumulative Survial Propability") 

Dim myFirstRow As DataRow = myTable.NewRow 
myFirstRow.Item(0) = 1 
myFirstRow.Item(1) = CasesCount 
myFirstRow.Item(2) = 0 
myFirstRow.Item(3) = 1 
myFirstRow.Item(4) = 1 

myTable.Rows.Add(myFirstRow) 

Dim Ptnseq = CasesCount 

For I = 1 To CasesCount 

    Dim myRow As DataRow = myTable.NewRow 

    'Get only one record from KaplanTable 
    Dim Kaplantmp = myReader.Read 
    Ptnseq = Ptnseq - 1 

    myRow.Item(0) = myReader.GetValue(2) 
    myRow.Item(1) = Ptnseq 'Sets the total number of remaining patients 
    myRow.Item(2) = myReader.GetValue(3) 

    If myRow.Item(0) = 0 Then 
     myRow.Item(3) = myTable.Rows(I - 1).Item(3) 
     myRow.Item(4) = myTable.Rows(I - 1).Item(4) 
    ElseIf myRow.Item(0) = 1 Then 
     myRow.Item(3) = myRow.Item(1)/myTable.Rows(I - 1).Item(1) 
     myRow.Item(4) = myRow.Item(3) * myTable.Rows(I - 1).Item(4) 
    End If 

    myTable.Rows.Add(myRow) 

Next I 

'Finished generating the lifetables, bind it to a grid 

Dim myGrid As New GridView 'Create a new dynamc Grid 
Dim myLabel As New Label 'Create a new dynamic label for this grid 
myPage.Form.Controls.Add(myLabel) 'add the label, then 
myPage.Form.Controls.Add(myGrid) 'add the grid 
myGrid.DataSource = myTable 'Bind the grid to the calculated lifetables 
myGrid.DataBind() 

DrawKaplanCurve(myTable, myChart, Stratum) 
myLabel.Text = "Current Stratum is: " & Stratum & "<br/>" & "Total Number of cases is: " & (myTable.Rows.Count - 1).ToString & " Cases" 

Return myTable.Rows.Count - 1 

End Function 

Public Shared Sub DrawKaplanCurve(ByVal myTable As DataTable, ByVal myChart As Chart, ByVal Stratum As String) 

Dim KaplanSeries As New Series 
KaplanSeries.ChartType = SeriesChartType.StepLine 
KaplanSeries.Name = Stratum 

Dim CensoredSeries As New Series 
CensoredSeries.ChartType = SeriesChartType.Stock 
CensoredSeries.Name = "Censored " & Stratum 

For I = 1 To myTable.Rows.Count - 1 

    Dim myPoint As New DataPoint 
    Dim xval As Double = myTable.Rows(I).Item(2) 
    Dim yval As Double = myTable.Rows(I).Item(4) 
    myPoint.SetValueXY(xval, yval) 

    ' If alive case, then add to censored data 
    If myTable.Rows(I).Item(0) = 0 Then 
     Dim CensoredPoint As New DataPoint 
     CensoredPoint.SetValueXY(myPoint.XValue, yval - 0.01, yval + 0.01) 
     CensoredPoint.ToolTip = "Censored Case Number " & myTable.Rows(I).Item(1).ToString & vbNewLine & "Survival Duration = " & myTable.Rows(I).Item(2).ToString & " months" & vbNewLine & "Cumulative Survival Propability = " & Round(yval * 100, 2).ToString & "%" 
     CensoredPoint.Color = myPoint.Color 
     If I <> myTable.Rows.Count - 1 Then CensoredSeries.Points.Add(CensoredPoint) 'add all except the last point because it shouldn't be censored 
    End If 

    'myPoint.ToolTip = "Case Number " & myTable.Rows(I).Item(1).ToString & vbNewLine & "Survival Duration = " & myTable.Rows(I).Item(2).ToString & " months" 
    If I = myTable.Rows.Count - 1 Then myPoint.Label = Round(yval * 100, 2).ToString & "%" 
    KaplanSeries.Points.Add(myPoint) 

Next 

myChart.Series.Add(KaplanSeries) 
myChart.Series.Add(CensoredSeries) 
myChart.Series(CensoredSeries.Name).IsVisibleInLegend = False 
Dim myLegend As New Legend 
myLegend.TitleForeColor = myChart.Series(myChart.Series.Count - 1).Color 
myChart.Legends.Add(myLegend) 

End Sub 
+2

qu'est-ce que cela a à voir avec Matlab? Il ressemble à visuel de base. –

+1

Merci Mokokamello, même si c'est en VB, j'apprécie quand même votre temps et votre patience. – Sm1

Questions connexes