分線性編程
A. 線性規劃 編程
除了數形結合,我還會EXCEL,不知道你要不要
B. Python編程如何判別線性
代碼如下:
"""Author: VictoriaCreated on: 2017.9.15 11:45"""import pandas as pdimport numpy as npimport matplotlib.pyplot as pltdef LDA(X0, X1): """ Get the optimal params of LDA model given training data. Input: X0: np.array with shape [N1, d] X1: np.array with shape [N2, d] Return: omega: np.array with shape [1, d]. Optimal params of LDA. """ #shape [1, d] mean0 = np.mean(X0, axis=0, keepdims=True) mean1 = np.mean(X1, axis=0, keepdims=True) Sw = (X0-mean0).T.dot(X0-mean0) + (X1-mean1).T.dot(X1-mean1) omega = np.linalg.inv(Sw).dot((mean0-mean1).T) return omegaif __name__=="__main__": #read data from xls work_book = pd.read_csv("../data/watermelon_3a.csv", header=None) positive_data = work_book.values[work_book.values[:, -1] == 1.0, :] negative_data = work_book.values[work_book.values[:, -1] == 0.0, :] print (positive_data) #LDA omega = LDA(negative_data[:, 1:-1], positive_data[:, 1:-1]) #plot plt.plot(positive_data[:, 1], positive_data[:, 2], "bo") plt.plot(negative_data[:, 1], negative_data[:, 2], "r+") lda_left = 0 lda_right = -(omega[0]*0.9) / omega[1] plt.plot([0, 0.9], [lda_left, lda_right], 'g-') plt.xlabel('density') plt.ylabel('sugar rate') plt.title("LDA") plt.show()
C. plc編程怎麼學
plc編程學習的步驟如下:
一、學習基本的硬體知識
編程之前,需要了解一些基本的硬體知識,最好從硬體的選型和畫圖入手,等把輸入輸出的類型,模擬量的選型等理解之後,再開始編程會簡單點。熟悉基本的硬體電路,就會發現原來梯形圖和這些硬體電路是可以很好對應起來的。
二、了解PLC編程的方式
線性編程、模塊化編程、結構化編程。對於西門子plc,以結構化編程為主,但可以使用線性編程和模塊化編程,對於結構化編程,需要有一定的結構化編程思想。
三、實踐多學多練習
有人指導或進修學習會比自己學習快一些。首先,買本關於PLC的書,然後手上有PLC設備,根據書上的例子,自己研究,實現一個功能,自己獨立做個PLC項目。
現在的PLC軟體設計的很好,安裝一個模擬器,基本的操作慢慢熟悉,然後觀察PLC的輸入輸出變化情況。在程序沒有充分驗證之前,建議先斷開負載,等所有的IO,模擬量測試完成後,再帶負載運行。
四、工藝PLC編程
重點是模擬原有的作業流程,將控制過程由程序運行來完成。所以核心內容就是對工藝的程序描述。因此需要熟練掌握PLC程序語言和基本的功能實現。PLc語言分梯形圖和語句及功能圖三種。
常用的是梯形圖,這個適合用於基本邏輯描述,語句表適合對數據加工用,相對難理解些。功能圖的適合步進類型的狀態功能描述,用的不多。自學的話需要安裝相應的軟體,各個廠家的有很多不同點,但是都類似。
設備怎麼動作,需要讀取什麼信息,如何控制現場的設備,如何實現最好的控制效果,要密切了解現場的工藝。
五、基本的自動化相關知識
1、過程儀表的硬體知識,包括感測器、變送器(二次儀表)和PLC本身,這是構建控制系統的基礎;比如兩線制,四線制,電流,電壓,PT100,對應的物理范圍,真空度換算等。
2、過程式控制制理論,包括各種控制模型的原理和應用,其中最重要的是二位調節和PID調節模型。PID調節是目前用得最廣泛的過程式控制制手段,且變化多端。需要理解原理,知道如何調節參數即可。
六、良好的編程習慣
1、變數命名,功能塊命名,定時器命名,最好遵循一定的原則,可讀性好;
2、熟悉軟體的基本命令的使用;
3、編寫公共的程序塊,比如閥門,電機的公用塊等;
4、合理分配主程序、子程序和定時中斷程序等;
5、合理分配數據塊,定時器,計數器,存儲器變數等,注意變數位置不能重疊。
七、軟體內部機理
每個軟體都各有不同,但是基本的東西應該都包括的:
1、了解指令的累加器,狀態字等內容。
2、指令的組成以及各部分的含義,無論是高級語言的if then else, 還是PLC的A AN JNB,指令的組成部分以及表示的含義需要理解明白;
3、了解幾種定址方式。單片機非常依賴,對於PLC來說,多了解對於復雜的編程有幫助。
4、了解數據格式,注意高低位分布,這個很重要,尤其是和第三方通訊的時候。
5、了解幾個常用的寄存器和存儲區域。比如DB,M,I,Q等。
D. 用c語言編程求線性方程組的解
給,下面的代碼已經編譯運行確認,肯定好用了,試試吧:)
#include<conio.h>
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#define
number
20
#define
esc
0x1b
#define
enter
0x0d
float
a[number][number+1]
,ark;
int
flag,n;
void
exchange(int
r,int
k);
float
max(int
k);
void
message();
int
main()
{
float
x[number];
/*此數組用於存放方程解*/
int
k,i,j;
char
celect;
system("cls");
printf("\n用gauss列主元消元法解線性方程組");
printf("\n1.解方程組請按enter.");
printf("\n2.退出程式請按esc.");
celect=getch();
if(celect==esc)
exit(0);
printf("\n
輸入方程組的維數:n=");
scanf("%d",&n);
printf("\n現在輸入系數矩陣a和向量b:");
for(i=1;i<=n;i++)
{
printf("\n請輸入a%d1--a%d%d系數和向量b%d:
\n",i,i,n,i);
/*實現將每一行中的系數和向量一次性輸入,數之間用空格格開,輸完後回車確定*/
for(j=1;j<=n+1;j++)
/*將剛才輸入的數存入數組*/
scanf("%f",&a[i][j]);
}
for(k=1;k<=n-1;k++)
{
ark=max(k);
if(ark==0)
/*判斷方程是否為線性方程,即是否合法*/
{
printf("\n此方程組不合法!");message();
}
else
if(flag!=k)
exchange(flag,k);
for(i=k+1;i<=n;i++)
for(j=k+1;j<=n+1;j++)
a[i][j]=a[i][j]-a[k][j]*a[i][k]/a[k][k];
}
x[n]=a[n][n+1]/a[n][n];
for(
k=n-1;k>=1;k--)
{
float
me=0;
for(j=k+1;j<=n;j++)
{
me=me+a[k][j]*x[j];
}
x[k]=(a[k][n+1]-me)/a[k][k];
}
for(i=1;i<=n;i++)
{
printf("\nx%d=%f",i,x[i]);
}
message();
getch();
return
1;
}
void
exchange(int
r,int
k)
/*交換行的矩函數*/
{
int
i;
for(i=1;i<=n+1;i++)
a[0][i]=a[r][i];
for(i=1;i<=n+1;i++)
a[r][i]=a[k][i];
for(i=1;i<=n+1;i++)
a[k][i]=a[0][i];
}
float
max(int
k)
/*比校系數大小的函數*/
{
int
i;
float
temp=0;
for(i=k;i<=n;i++)
if(fabs(a[i][k])>temp)
{
temp=fabs(a[i][k]);
flag=i;
}
return
temp;
}
void
message()
/*實現菜單選擇的函數*/
{
printf("\n
繼續運算按
enter
,退出程式按
esc!");
switch(getch())
{
case
enter:
main();
case
esc:
exit(0);
default:{printf("\n不合法的輸入!");message();}
}
}
E. 二維分段線性,怎麼用編程語音描述
電腦基礎----對計算機硬體、體系結構不了解是不行的。另外像二進制、十六進制、補碼、位運算(與、或、非、移位)
編程語言----有人你說C/C++,有人說Java,還有人說別的。還是要看將來會用什麼。數據類型、順序控制、子程序、函數等概念,多數編程語言(高級語言)都類似的,精通一門後可以觸類旁通。
網路知識----現在的電腦沒有獨立運行的了,信息孤島時代已經過去了。很多軟體都是在網路上運行的。其中對TCP/IP協議一定要熟悉。
資料庫----資料庫應用是軟體中非常重要的部分。就算你不搞資料庫應用開發,也要對資料庫要了解。
數據結構----光會程序語言是不夠的,「演算法」就像程序的靈魂,會解決問題才能寫出好的程序來。
UML、軟體工程等----做「編程高手」,不是光靠自己聰明的腦瓜來寫程序的,現在是信息爆炸的時代,做軟體經常是很大的項目,需要很多人來做。開始就算你做寫代碼的最底層的程序員,也要根據設計人員的文檔來寫;等層次提高了,設計的任務就多了,就要能寫出各種文檔來:需求分析、模塊設計、詳細設計、測試用例....
數學----「演算法」是哪裡來的?最終歸結為數學模型!
英語----少不了要看一些英語資料。雖說現在多數軟體工具都漢化了,但最簡單你也要認識「if」「else」「for」「do」「while」「case」「this」「botton」「text」「list」等等吧。
學習方法方面提示一點:
一要能吃苦,要有專勁,要耐得住寂寞。
二要有人指點,尤其是在入門的時候。
三是實踐很重要。紙上談兵永遠也不會把你變成高手的,除了自己練習,做好事學的差不多了就趕緊找一個程序員的工作,從底層做起,接觸到了團隊開發最好。
【二】電腦編程的基礎知識
1:如果你能夠熟練的使用Windows的話,你就可以開始你的程序生涯了!
2:首先從C語言開始。有的朋友可能認為C語言太難了,應該從VB開始。雖然,對於一個初學者來說,用一些控制項堆砌成一個小軟體,是有一些成就感,但是,基礎才是最重要的!C語言對於數據類型的描敘,遠比VB裡面說的更為全面,清楚,明白,而這些卻是編程中的根本!
3:學C語言,從數據類型,基本表達式,再到條件語句,循環語句,然後學習函數,再加上一些簡單的數組知識,就可以了!一句話,到現在為止,你只要理解結構化程序設計的思想也就夠了!
4:有了以上的基礎,就要開始學匯編了。匯編開始的時候是很難,那些各種各樣的寄存器,分段的內存地址,是很難理解,可是這些知識理解了以後,後面的內容就簡單了,學習8086的那些指令,再加上一些偽操作,還有DOS和BIOS中斷的調用,就可以看懂書上的匯編程序了。
5:有了匯編的基礎,再來學習C語言中的精華部分----指針,可謂如魚得水了。現在要對C語言全全面面的學一遍了,譚版的教材要從頭到尾認認真真的看兩遍以上。
6:學完以上的內容,有必要研究一下數據結構了,線性表,堆棧,隊列,樹,圖,二叉樹,等等,都要滾瓜爛熟!
7:請時刻記住:浮躁是學習編程的大忌!
8:現在,你應該學習一些資料庫的知識,還有一些常用的演算法了!
9:如果以上的知識都學精通的話,就可以開始C++的課程了,找本C++上手的書,用一個星期的時間大概了解一下C++,然後找一本VC上手的書,再花一個星期的時間學習VC的界面和用法,就可以做一些簡單的應用了!
10:要想學好VC,沒有扎實的C++知識是不行的,以下書籍是VC程序員必須翻的爛熟的:C++Primer,Effective C++,Thinking in C++,More Effective C++
深入淺出MFC。
11:深刻理解C++面向對象的思想!
12:編程的時候,出錯是難免的,所以,MSDN一定要熟練使用;好的代碼風格會使調試的時候,更加簡單的查錯,所以,一定要養成良好的編程風格!
13:如果嚴格的走好了以上的每一步,踏上了編程的門檻,可以混口飯吃了!
至於在以後,編譯原理,操作系統,還有軟體工程等等基礎知識,是必不可少的!
F. c語言解線性方程組的編程題 【做的好會多給分】
以下演算法的適用條件:A的各階主子式不為零
另外還可以採用
直接法:
消元法:Gauss-Jordan消元法,
分解法:Dolittle分解 (我用的是Courant分解法),追趕法,對稱正定矩陣的LDL『分解
----------
迭代法:
Jacobi迭代
Gauss-Seidel迭代
鬆弛迭代
-----------------
你上網可以搜索一下,或者看看數值計算方面的書
OK, 你看看這個, 另外還加了注釋 :
Courant分解演算法:
aX = b, 作 A=LU, L是下三角矩陣, U是上三角矩陣
即L =
| L11
| L21 L22
| L31 L32 L33
| ..............
| Ln1 Ln2 ........Lnn
U =
| 1 U12 ..... U1n
| 空格 1 ..... U2n
| 空格 空格 ........
| 空格 空格 空格 空格 空格1
---------------------------------------------------
aX = b -----> LUX = b
記 UX = y,
由Ly = b得到
因為無法輸出數學符號,以下採用[i, j]Ai 表示對Ai從i到j求和
yi = (bi - [j=1, i-1]Lij yj) / Lii i = 1, 2, ..., n
由UX = y得到
xi = yi - [j=i+1, n]uij xj j = n, n-1, ..., 2, 1
你在紙上驗證一下就明白了
--------------------------------------------------------------
以下採用Courant分解 解 aX = b, 經檢查,程序運行正確
這是運行結果:
--------------------------------------------------------------
Input n value(dim of Ax=b): 3
Now input the matrix a(i, j), i, j = 0, ..., 2:
1 2 1 -2 -1 -5 0 -1 6
Now input the matrix b(i), i = 0, ..., 2:
24 -63 50
Solve...x_i =
7.000000
4.000000
9.000000
--------------------------------------------------------------
#include "stdafx.h"
#include <stdio.h>
#include <math.h>
#define MAX_N 20
int main(int argc, char* argv[])
{
int n; // 未知數個數
int i, j, k;
static double a[MAX_N][MAX_N], b[MAX_N], x[MAX_N], y[MAX_N];
static double l[MAX_N][MAX_N], u[MAX_N][MAX_N];
printf("\nInput n value(dim of Ax=b): ");
scanf("%d", &n);
if(n >MAX_N)
{
printf("The input n is larger than MAX_N, please redefine the MAX_N.\n");
return 1;
}
if(n <= 0)
{
printf("Please input a number between 1 and %d.\n", MAX_N);
return 1;
}
// {{ 程序輸入
printf("Now input the matrix a(i, j), i, j = 0, ..., %d:\n", n-1);
for (i=0; i<n; i++)
for (j=0; j<n; j++)
scanf("%lf", &a[i][j]);
printf("Now input the matrix b(i), i = 0, ..., %d:\n", n-1);
for(i=0; i<n; i++)
scanf("%lf", &b[i]);
// }} 程序輸入
for(i=0; i<n; i++)
u[i][i] = 1; //
for(k=0; k<n; k++)
{
for(i=k; i<n; i++) // 計算L的第k列元素
{
l[i][k] = a[i][k];
for(j=0; j<=k-1; j++)
l[i][k] -= (l[i][j]*u[j][k]);
}
for(j=k+1; j<n; j++) //計算U的第k行元素
{
u[k][j] = a[k][j];
for(i=0; i<=k-1; i++)
u[k][j] -= (l[k][i]*u[i][j]);
u[k][j] /= l[k][k];
}
}
for(i=0; i<n; i++) // 解Ly = b
{
y[i] = b[i];
for(j=0; j<=i-1; j++)
y[i] -= (l[i][j]*y[j]);
y[i] /= l[i][i];
}
for(i=n-1; i>=0; i--) // 解UX = Y
{
x[i]=y[i];
for(j=i+1; j<n; j++)
x[i] -= (u[i][j]*x[j]);
}
printf("Solve...x_i = \n"); // 輸出結果
for(i=0; i<n; i++)
printf("%f\n", x[i]);
return 0;
}
G. 怎樣用MATLAB 實現分段函數的線性變換
一、MATLAB的命令窗口和編程窗口
二、MATLAB的數據結構與基本運算
三、MATLAB的矩陣表示與運算
四、MATLAB的繪圖
五、MATLAB的程序設計
H. 什麼是PLC線性編程
就是不帶PID的不帶比例微分積分的
I. 請問用非線性系統中的分段線性環節是怎樣的,怎麼用MATLAB編程啊
Matlab中用heaviside(t),
Simulink中用比較選擇通道
J. MATLAB分段線性變換圖像處理
你說的應該是灰度拉伸
灰度拉伸是根據灰度直方圖的分布拉伸某段灰度區間以改善輸出圖像。灰度拉伸功能用於加強選擇區域的對比度;它在0到255之間按順序取兩點X1和X2,他們將0-255之間的灰度劃分成[0,x1],[x1,x2]和[x2,255]三個灰度區間;採取一個分段式的灰度拉伸方程來強化車牌前景和背景間的灰度差異。通過調整Y1和Y2的大小改變灰度拉伸方程在[0,X1]和[X2,255]之間的斜率,突出[X1,X2]間的車牌區域。
這段摘自「車牌定位與字元分割的研究與實現」
按照裡面給的線性公式拉伸段內的灰度應該不難編程