Как построить земельный участок - PullRequest
0 голосов
/ 14 декабря 2010

Есть ли встроенный / m файл в Matlab получить сильно колеблющийся и несколько пиков сюжета альпийская функция? Я хочу получить похожая фигура в 3D, которая! alt текст и alt text

Формула (вероятно):

г = Sin (x1), Sin (х2) \ SQRT {x1x2}

Как можно нарисовать поверхностный график для основных функций, таких как alpine, rosenbrock, функция ящика для яиц и т. Д., В красочной иллюстративной форме. Пожалуйста, помогите с примером кода.

Ответы [ 2 ]

1 голос
/ 14 декабря 2010

Ну, вы должны создать сетку, выбирая правильную выборку (в этом примере от -5 до 5 с шагом 0,1).В Z поместите формулу вашей функции 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

Если вы хотите получить значимый цвет, просто изучите функцию colormap, это очень просто.

0 голосов
/ 14 декабря 2010

это может быть не тот ответ, который вы ищете, но я подумал, что он может помочь вам

Я столкнулся с той же проблемой, когда мне пришлось программно построить кривую выживания Каплана Мейера

что мы сделали(я и моя команда) сначала получили формулу , затем мы создали datatable , который использовал эту формулу.

источником данных после формирования был источник данных для управления диаграммой , где вы можете отредактировать визуальный вывод по своему усмотрению.

посмотрите на приведенный ниже код (это только его часть), чтобы иметь представление.если вам нужно больше кода, пожалуйста, дайте мне знать

  '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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...