美國時間2014年11月13日,PHP開發團隊,在「PHP 5.6.3 is available|PHP: Hypertext Preprocessor」上公布了PHP5.6系的最新版本「PHP 5.6.3」。
在最新的版本5.6.3不僅修改了多個Bug,并且修改了fileinfo模塊里存在的安全漏洞。
PHP團隊推薦使用PHP5.6系列的用戶,升級到最新版本5.6.3。
簡單介紹一下,如何在CentOS上安裝PHP5.6。
配置yum源
追加CentOS 6.5的epel及remi源。
# rpm -Uvh http://ftp.iij.ad.jp/pub/linux/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm
# rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
以下是CentOS 7.0的源。
# yum install epel-release # rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
使用yum list命令查看可安裝的包(Packege)。
# yum list --enablerepo=remi --enablerepo=remi-php56 | grep php
安裝PHP5.6
yum源配置好了,下一步就安裝PHP5.6。
# yum install --enablerepo=remi --enablerepo=remi-php56 php php-opcache php-devel php-mbstring php-mcrypt php-mysqlnd php-phpunit-PHPUnit php-pecl-xdebug php-pecl-xhprof
用PHP命令查看版本。
# php --version PHP 5.6.0 (cli) (built: Sep 3 2014 19:51:31) Copyright (c) 1997-2014 The PHP Group Zend Engine v2.6.0, Copyright (c) 1998-2014 Zend Technologies with Zend OPcache v7.0.4-dev, Copyright (c) 1999-2014, by Zend Technologies with Xdebug v2.2.5, Copyright (c) 2002-2014, by Derick Rethans
在這里安裝的版本是PHP5.6.0,細心的用戶可能已經發現ZendGuardLoader變成Zend OPcahe了。
對從PHP5.5開始PHP代碼緩存從APC變成了Zend OPcache了。
posted @
2016-03-23 12:16 華夢行 閱讀(172) |
評論 (0) |
編輯 收藏
posted @
2016-03-23 11:43 華夢行 閱讀(180) |
評論 (0) |
編輯 收藏
1、d:\mysql\bin\>mysql -h localhost -u root //這樣應該可以進入MySQL服務器
2、mysql>GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION //賦予任何主機訪問數據的權限
3、mysql>FLUSH PRIVILEGES //修改生效
4、mysql>EXIT //退出MySQL服務器
# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/5.6/en/server-configuration-defaults.html
修改默認端口
[mysqld]
port=3309
posted @
2016-02-24 14:34 華夢行 閱讀(147) |
評論 (0) |
編輯 收藏
1. Change root user
2. Install Remi repository
## CentOS 6 and Red Hat (RHEL) 6 ## rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
3. Check Available MySQL versions
yum --enablerepo=remi,remi-test list mysql mysql-server
Output:
Loaded plugins: changelog, fastestmirror, presto, refresh-packagekit ... remi | 3.0 kB 00:00 remi/primary_db | 106 kB 00:00 Available Packages mysql.i686 5.5.37-1.fc18.remi @remi mysql-server.i686 5.5.37-1.fc18.remi @remi |
4. Update or Install MySQL 5.5.37
yum --enablerepo=remi install mysql mysql-server
5. Start MySQL server and autostart MySQL on boot
/etc/init.d/mysqld start ## use restart after update ## OR ## service mysqld start ## use restart after update chkconfig --levels 235 mysqld on
6. MySQL Secure Installation
/usr/bin/mysql_secure_installation
7. Connect to MySQL database (localhost) with password
mysql -u root -p ## OR ## mysql -h localhost -u root -p
8. Create Database, Create MySQL User and Enable Remote Connections to MySQL Database
## CREATE DATABASE ## mysql> CREATE DATABASE webdb; ## CREATE USER ## mysql> CREATE USER 'webdb_user'@'10.0.15.25' IDENTIFIED BY 'password123'; ## GRANT PERMISSIONS ## mysql> GRANT ALL ON webdb.* TO 'webdb_user'@'10.0.15.25'; ## FLUSH PRIVILEGES, Tell the server TO reload the GRANT TABLES ## mysql> FLUSH PRIVILEGES;
posted @
2015-12-07 19:36 華夢行 閱讀(184) |
評論 (0) |
編輯 收藏
mysql> use mysql;
查詢host值:
mysql> select user,host from user;
如果沒有"%"這個host值,就執行下面這兩句:
mysql> update user set host='%' where user='root';
mysql> flush privileges;
或者也可以執行:
mysql>grand all privileges on *.* to root@'%' identifies by ' xxxx';
其中 第一個*表示數據庫名;第二個*表示該數據庫的表名;如果像上面那樣 *.*的話表示所有到數據庫下到所有表都允許訪問;
‘%':表示允許訪問到mysql的ip地址;當然你也可以配置為具體到ip名稱;%表示所有ip均可以訪問;
后面到‘xxxx'為root 用戶的password;
舉例:
任意主機以用戶root和密碼mypwd連接到mysql服務器
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'mypwd' WITH GRANT OPTION;
mysql> flush privileges;
IP為192.168.1.102的主機以用戶myuser和密碼mypwd連接到mysql服務器
mysql> GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'192.168.1.102' IDENTIFIED BY 'mypwd' WITH GRANT OPTION;
mysql> flush privileges;
posted @
2015-12-06 22:29 華夢行 閱讀(265) |
評論 (0) |
編輯 收藏
Linux(centos) 更改MySQL數據庫目錄位置MySQL默認的數據文件存儲目錄為/var/lib/mysql。假如要把目錄移到/home/data下需要進行下面幾步:
1、home目錄下建立data目錄
cd /homemkdir data
2、把MySQL服務進程停掉:
mysqladmin -u root -p shutdown
3、把/var/lib/mysql整個目錄移到/home/data
mv /var/lib/mysql /home/data/
這樣就把MySQL的數據文件移動到了/home/data/mysql下
4、找到my.cnf配置文件
如果/etc/目錄下沒有my.cnf配置文件,請到/usr/share/mysql/下找到*.cnf文件,拷貝其中一個到/etc/并改名為my.cnf)中。命令如下:
[root@test1 mysql]# cp /usr/share/mysql/my-medium.cnf /etc/my.cnf
5、編輯MySQL的配置文件/etc/my.cnf
為保證MySQL能夠正常工作,需要指明mysql.sock文件的產生位置。修改socket=/var/lib/mysql/mysql.sock一行中等號右邊的值為:/home/mysql/mysql.sock 。操作如下:
vi my.cnf (用vi工具編輯my.cnf文件,找到下列數據修改之)# The MySQL server[mysqld] port = 3306#socket = /var/lib/mysql/mysql.sock(原內容,為了更穩妥用“#”注釋此行)socket = /home/data/mysql/mysql.sock (加上此行)
6、修改MySQL啟動腳本/etc/init.d/mysql
最后,需要修改MySQL啟動腳本/etc/init.d/mysql,把其中datadir=/var/lib/mysql一行中,等號右邊的路徑改成你現在的實際存放路徑:home/data/mysql。
[root@test1 etc]# vi /etc/init.d/mysql#datadir=/var/lib/mysql(注釋此行)datadir=/home/data/mysql (加上此行)
如果是CentOS還要改 /usr/bin/mysqld_safe 相關文件位置;
最后 做一個mysql.sock 鏈接:
ln -s /data/ljl/mysql/mysql.sock /var/lib/mysql/mysql.sock
7、重新啟動MySQL服務
/etc/init.d/mysqld start
或用reboot命令重啟Linux
如果工作正常移動就成功了,否則對照前面的7步再檢查一下。還要注意目錄的屬主和權限。
復制內容到剪貼板
代碼:
[root@sample ~]# chown -R mysql:mysql /home/data/mysql/ ← 改變數據庫的歸屬為mysql
[root@sample ~]# chmod 700 /home/data/mysql/test/ ← 改變數據庫目錄屬性為700
[root@sample ~]# chmod 660 /home/data/mysql/test/* ← 改變數據庫中數據的屬性為660
posted @
2015-12-06 22:28 華夢行 閱讀(223) |
評論 (0) |
編輯 收藏
1. title 是關鍵字 ,盡量不要用
posted @
2015-11-24 23:18 華夢行 閱讀(104) |
評論 (0) |
編輯 收藏
CSS Sprites 原理:其實就是把網頁中一些背景圖片整合到一張圖片文件中,再利用CSS的“background-image”,“background- repeat”,“background-position”的組合進行背景定位,background-position可以用數字精確的定位出背景圖片的位置。
CSS Sprites 優點:
1、利用CSS Sprites能很好地減少網頁的http請求,從而大大的提高頁面的性能,這也是CSS Sprites最大的優點,也是其被廣泛傳播和應用的主要原因;
2、CSS Sprites能減少圖片的字節,曾經比較過多次3張圖片合并成1張圖片的字節總是小于這3張圖片的字節總和。
3、解決了網頁設計師在圖片命名上的困擾,只需對一張集合的圖片上命名就可以了,不需要對每一個小元素進行命名,從而提高了網頁的制作效率。
4、更換風格方便,只需要在一張或少張圖片上修改圖片的顏色或樣式,整個網頁的風格就可以改變。維護起來更加方便。
通過打開目前您的CSS文件夾下面的CSS圖片碎片后,您可以自行拖拽CSS圖片碎片技進行適當的位置調整,可以通過雙擊圖片來移除該圖片,進行CSS Sprite 操作時,拖拽與CSS Sprite 兩個選項可隨時切換使用。
posted @
2015-10-25 21:52 華夢行 閱讀(99) |
評論 (0) |
編輯 收藏
最近朋友在搞網易的企業免費郵箱,擁有自己的獨立域名,這個其實很簡單,只要網易的郵箱mx設置就行了,但是嘗試了很久,按照設置設置完之后還是不行,我用的是萬網的域名解析,如下圖 :

最主要的就是網易的幫助缺少了一個cname的解析,主機記錄設置mail 然后記錄值和mx的一致,然后重要的是 mx和txt的設置主機記錄都要是@。這里網易都沒有說,所以完整的來說就是這樣的:
設置mx主機記錄為@記錄值為mx.ym.163.cin mx優先級是10
設置txt主機記錄為@ 記錄值為v=spf1 include:spf.163..com ~all
設置cname 主機記錄為mail 記錄值是ym.163.com
posted @
2015-10-20 11:24 華夢行 閱讀(189) |
評論 (0) |
編輯 收藏
wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u60-b27/jdk-8u60-linux-x64.rpm
posted @
2015-10-13 23:19 華夢行 閱讀(138) |
評論 (0) |
編輯 收藏
相當于-dpR,保持文件的連接(d),保持原文件的屬性(p)并作遞歸處理(R)-a 參數的意義等同于 -dR --preserve=all就是以下幾個意義的組合:-d: 保持軟鏈接-R: 遞歸--preserve=all :保持文件原有屬性
posted @
2015-10-03 18:38 華夢行 閱讀(441) |
評論 (0) |
編輯 收藏
iptables -I INPUT -p tcp -s 115.28.190.242 --dport 83 -j ACCEPT
[root@www.jstong.com bin]# service iptables save
iptables:將防火墻規則保存到 /etc/sysconfig/iptables: [確定]
[root@ZWCLC bin]# service iptables restart
posted @
2015-09-17 23:57 華夢行 閱讀(187) |
評論 (0) |
編輯 收藏
1、方法一,編輯rc.loacl腳本
Ubuntu開機之后會執行/etc/rc.local文件中的腳本,
所以我們可以直接在/etc/rc.local中添加啟動腳本。
當然要添加到語句:exit 0 前面才行。
如:
sudo vi /etc/rc.local
/usr/local/ssdb/ssdb-server -d /usr/local/ssdb/ssdb.conf
然后在 exit 0 前面添加好腳本代碼。
posted @
2015-09-12 20:25 華夢行 閱讀(190) |
評論 (0) |
編輯 收藏
Ubuntu 默認是DHCP自動獲取IP。設定好靜態IP,重啟了也會變。
1、設定IP
sudo vi /etc/network/interfaces
auto lo
iface lo inet loopback #lo 是本地回環地址:127.0.0.1
auto eth0
iface eth0 inet static #將dhcp修改為static
address 192.168.1.152 #添加下面的IP、網關等
gateway 192.168.1.1
netmask 255.255.255.0
network 192.168.1.0
broadcast 192.168.1.255
2. 修改dns解析
因為以前是dhcp解析,所以會自動分配dns服務器地址
而一旦設置為靜態ip后就沒有自動獲取到的dns服務器了
要自己設置一個
sudo vim /etc/resolv.conf
寫上一個公網的DNS
nameserver 114.114.114.114
(注意:8.8.8.8是谷歌的DNS服務器,但是解析速度慢,還是找到一個國內的dns來用)
3. 重啟網卡:
sudo /etc/init.d/networking restart
注意:重啟Ubuntu后發現又不能上網了,問題出在/etc/resolv.conf。重啟后,此文件配置的dns又被自動修改為默認值。所以需要永久性修改DNS。方法如下:
# vim /etc/resolvconf/resolv.conf.d/base
nameserver 192.168.1.1
nameserver 114.114.114.114
posted @
2015-09-12 16:46 華夢行 閱讀(789) |
評論 (0) |
編輯 收藏
在Solr中該如何使用IK分詞器呢,這是小伙伴們問的頻率比較高的一個問題,今晚特此更新此篇博客。其實之前我在其他博客里已經使用了IK分詞器,只是我沒做詳細說明。
在schema.xml配置中其實有很多關于分詞器的配置示例,我從中摘錄一段配置示例,比如:
fileType是用來定義域類型的,name即表示域名稱,class即表示域類型對應的class類,如果是solr內置的域類型則可以直接使用solr.前綴+域類型的類名即可,如果是你自定義的域類型,則class表示自定義域類型的完整類名(包含完整的包路徑),在fileType元素下有analyzer元素,用來配置當前域類型使用什么分詞器,你肯定很奇怪,為什么要配置兩個analyzer,其實主要是為了區分兩個階段:索引建立階段和Query查詢階段,索引建立階段需要分詞毋庸置疑,查詢階段是否需要分詞,則取決于你的業務需求,用過Google的知道,用戶在查詢輸入框里輸入查詢關鍵字,這時候我們需要對用戶輸入的查詢關鍵字進行分詞器,這時候我們就需要配置查詢階段使用什么分詞器,為什么把分開配置?兩者可以使用統一配置不行嗎,配置兩遍不是顯得很冗余且繁瑣嗎?analyzer的type元素就表示這兩個階段,之所以要分階段配置分詞器,是為了滿足用戶潛在的需求,因為查詢階段的分詞需求和索引階段的分詞需求不一定是相同的。我們都知道分詞器Analyzer是由一個Tokenizer + N個tokenFilter組成,這就是為什么analyzer元素下會有tokenizer元素和filter元素,但tokenizer元素只允許有一個,filter元素可以有N個。之所以這樣設計是為了為用戶提供更細粒度的方式來配置分詞器的行為,即你可以任意組合tokenizer和filter來實現你的特定需求,當然你也可以把這種組合寫在Analyzer類里,然后直接在analyzer元素的class屬性里配置自定義分詞器的完整類名,這樣就不需要這么繁瑣的配置tokenizer和filter,即把實現細節屏蔽在analyzer類內部,但這樣做的話,如果你需要更改實現細節,則需要修改Analyzer源碼,然后重新打包成jar,相對來說,比較麻煩點,而使用analyzer,tokenizer,filter這樣來配置,雖然繁瑣點,但更靈活。而且采用
然后我們在代碼里String useSmart = DOMUtil.getAttr(attrs,"useSmart");就可以獲取到屬性值了,然后就是通過反射把屬性值設置到IKAnalyzer類的useSmart屬性中了,這是基本的Java反射操作,下面我提供幾個反射工具方法:
/**
* 循環向上轉型, 獲取對象的DeclaredField. 若向上轉型到Object仍無法找到, 返回null.
*/
protected static Field getDeclaredField(final Object object, final String fieldName) {
if (null == object || null == fieldName || fieldName.equals("")) {
return null;
}
for (Class> superClass = object.getClass(); superClass != Object.class; superClass = superClass.getSuperclass()) {
try {
return superClass.getDeclaredField(fieldName);
} catch (NoSuchFieldException e) {
// Field不在當前類定義,繼續向上轉型
continue;
}
}
return null;
}
/**
* 直接設置對象屬性值, 無視private/protected修飾符, 不經過setter函數.
*/
public static void setFieldValue(final Object object, final String fieldName, final Object value) {
Field field = getDeclaredField(object, fieldName);
if (field == null) {
throw new IllegalArgumentException("Could not find field [" + fieldName + "] on target [" + object + "]");
}
makeAccessible(field);
try {
field.set(object, value);
} catch (IllegalAccessException e) {
throw new RuntimeException("直接設置對象屬性值出現異常", e);
}
}
/**
* 強行設置Field可訪問
*/
protected static void makeAccessible(final Field field) {
if (!Modifier.isPublic(field.getModifiers()) || !Modifier.isPublic(field.getDeclaringClass().getModifiers())) {
field.setAccessible(true);
}
}
直接調用setFieldValue方法即可,比如在 Analyzer analyzer = clazz.newInstance();這句下面添加一句
setFieldValue(analyzer,"useSmart",Boolean.valueOf( useSmart ));
這樣我們在xml中配置的useSmart參數就設置到Analyzer類中了,這樣才能起作用。solr源碼如何導入Eclipse上篇博客里我已經介紹過了,至于如果把修改過后的代碼打包成jar,直接使用eclipse自帶的export功能即可,如圖:
然后一路Next即可。我只是說說思路,剩下留給你們自己去實踐。
但是采用改源碼方式不是很優雅,因為你本地雖然是修改好了,哪天你由Solr5.1.0升級到5.2.0,還要再改一遍,沒升級一次就要改一次,你的代碼copy給別人用,別人運行代碼后看不到效果,增加溝通成本,你還得把你改過源碼的jar包共享給別人,這也就是為什么有那么多人找我要什么IK jar包。
在Solr中可以使用TokenizerFactory方式來解決我剛才提出的問題:IKAnalyzer分詞器的useSmart參數無法通過schema.xml配置文件進行設置。我花了點時間擴展了IKTokenizerFactory類,代碼如下:
package org.apache.lucene.analysis.ik;
import java.util.Map;
import org.apache.lucene.analysis.Tokenizer;
import org.apache.lucene.analysis.util.TokenizerFactory;
import org.apache.lucene.util.AttributeFactory;
import org.wltea.analyzer.lucene.IKTokenizer;
public class IKTokenizerFactory extends TokenizerFactory {
public IKTokenizerFactory(Map
args) {
super(args);
useSmart = getBoolean(args, "useSmart", false);
}
private boolean useSmart;
@Override
public Tokenizer create(AttributeFactory attributeFactory) {
Tokenizer tokenizer = new IKTokenizer(attributeFactory,useSmart);
return tokenizer;
}
}
同時我對 IKTokenizer類也稍作了修改,修改后源碼如下:
/**
* IK分詞器 Lucene Tokenizer適配器類
* 兼容Lucene 4.0版本
*/
public final class IKTokenizer extends Tokenizer {
//IK分詞器實現
private IKSegmenter _IKImplement;
//詞元文本屬性
private final CharTermAttribute termAtt;
//詞元位移屬性
private final OffsetAttribute offsetAtt;
//詞元分類屬性(該屬性分類參考org.wltea.analyzer.core.Lexeme中的分類常量)
private final TypeAttribute typeAtt;
//記錄最后一個詞元的結束位置
private int endPosition;
private Version version = Version.LATEST;
/**
* Lucene 4.0 Tokenizer適配器類構造函數
* @param in
* @param useSmart
*/
public IKTokenizer(Reader in , boolean useSmart){
//super(in);
offsetAtt = addAttribute(OffsetAttribute.class);
termAtt = addAttribute(CharTermAttribute.class);
typeAtt = addAttribute(TypeAttribute.class);
_IKImplement = new IKSegmenter(input , useSmart);
}
public IKTokenizer(AttributeFactory factory, boolean useSmart) {
super(factory);
offsetAtt = addAttribute(OffsetAttribute.class);
termAtt = addAttribute(CharTermAttribute.class);
typeAtt = addAttribute(TypeAttribute.class);
_IKImplement = new IKSegmenter(input , useSmart);
}
/* (non-Javadoc)
* @see org.apache.lucene.analysis.TokenStream#incrementToken()
*/
@Override
public boolean incrementToken() throws IOException {
//清除所有的詞元屬性
clearAttributes();
Lexeme nextLexeme = _IKImplement.next();
if(nextLexeme != null){
//將Lexeme轉成Attributes
//設置詞元文本
termAtt.append(nextLexeme.getLexemeText());
//設置詞元長度
termAtt.setLength(nextLexeme.getLength());
//設置詞元位移
offsetAtt.setOffset(nextLexeme.getBeginPosition(), nextLexeme.getEndPosition());
//記錄分詞的最后位置
endPosition = nextLexeme.getEndPosition();
//記錄詞元分類
typeAtt.setType(nextLexeme.getLexemeTypeString());
//返會true告知還有下個詞元
return true;
}
//返會false告知詞元輸出完畢
return false;
}
/*
* (non-Javadoc)
* @see org.apache.lucene.analysis.Tokenizer#reset(java.io.Reader)
*/
@Override
public void reset() throws IOException {
super.reset();
_IKImplement.reset(input);
}
@Override
public final void end() {
// set final offset
int finalOffset = correctOffset(this.endPosition);
offsetAtt.setOffset(finalOffset, finalOffset);
}
修改后重新打包的IKAnalyzer jar請見底下的附件。
然后我把它打包成了 solr-analyzer-ik-5.1.0.jar,只需要把這個jar包復制到你的core\lib目錄下即可,然后你就可以像配置StandardTokenizerFactory一樣的使用我們自定義的IKTokenizerFactory類了,并且能配置useSmart參數,這正是我想要的,能靈活的控制分詞器參數,so cool。配置示例如下:
然后field域里應用我們配置的這個text_ik域類型,如圖:
然后你還需要把IKAnalyzer jar包以及我們自定義的IKTokenizerFactory的jar包copy到你當前core\lib目錄下,如圖:
IKAnalyzer jar建議使用底下附件里我新上傳的,因為源碼我稍作了修改,上面已經提到過了。然后你需要把IKAnalyzer.cfg.xml配置文件copy到E:\apache-tomcat-7.0.55\webapps\solr\WEB-INF\classes目錄下,其中E
:\apache-tomcat-7.0.55為我的Tomcat安裝根目錄,請類比成你自己的tomcat安裝根目錄,你懂的。如圖:
IKAnalyzer.cfg.xml配置如圖:
ext.dic為IK分詞器的自定義擴展詞典,內容如圖:
我就在里面加了兩個自定義詞語。
然后你就可以啟動你的tomcat,然后如圖進行分詞測試了,
上圖是用來測試useSmart參數設置是否有生效,如果你看到如圖的效果,說明配置成功了。
上圖是用來測試自定義詞典是否有生效,因為我在ext.dic自定義詞典里添加了 勁爆 和 屌絲 這兩個詞,所以IK能分出來,逆襲和白富美沒有在自定義擴展詞典里添加,所以IK分不出來。如果你能看到如圖效果,說明IK的自定義擴展詞典也配置成功了。到此,關于在Solr中使用IK分詞器就介紹到這兒了,如果你還有任何疑問,請通過以下方式聯系到我,謝謝!!!博客里提到的相關jar包配置文件等等資源文件,我待會兒都會上傳到底下的附件里,特此提醒!!!!!
posted @
2015-09-11 17:26 華夢行 閱讀(650) |
評論 (0) |
編輯 收藏
“以直代曲”的思想是利用直線段來近似曲線,也即通過某點的切線來代替曲線,這樣使得有關曲線的問題轉化到直線段上來,從而得到簡化。
posted @
2015-09-02 16:13 華夢行 閱讀(317) |
評論 (0) |
編輯 收藏






posted @
2015-09-01 23:24 華夢行 閱讀(155) |
評論 (0) |
編輯 收藏
隨機變量x的分布函數

A=0B=0.5 c=2
clc;
clf;
x=-3:0.01:3;
length(x)
for i=1:length(x)
if x(i)<0
y(i)=0;
else if x(i)<1
y(i)=0.5*(x(i)^2);
else if x(i)<2
y(i)=2*x(i)-0.5*(x(i)^2)-1;
else
y(i)=1;
end
end
end
end
plot(x,y);
grid on;
hold on;
posted @
2015-09-01 00:19 華夢行 閱讀(162) |
評論 (0) |
編輯 收藏
% 調用二項分布的概率值函數 binopd
% 格式 binopdf (k, n, p) , p — 每次試驗事件A發生的概率;K—事件A發生K次;n—試驗總次數
clear;
px=binopdf(45,100,0.5) % 計算x=45的概率
%作圖
x=1:100;
p=binopdf(x,100,0.5);
plot(x,p);title('概率分布圖')
posted @
2015-08-26 22:35 華夢行 閱讀(151) |
評論 (0) |
編輯 收藏
for i=1:size(a,2)
for j=1:size(a,2)
c(i,j)=sum((a(:,i)-mean(a(:,i))).*(a(:,j)-mean(a(:,j))))/(size(a,1)-1);
end
end
c =
10.3333 -4.1667 3.0000
-4.1667 2.3333 -1.5000
3.0000 -1.5000 1.0000
c為求得的協方差矩陣,在matlab以矩陣a的每一列為變量,對應的每一行為樣本。這樣在矩陣a中就有3個列變量分別為a(:,1), a(:,2), a(:,3)。
在協方差矩陣c中,每一個元素c(i,j)為對第i列與第j列的協方差,例如c(1,2) = -4.1667為第一列與第二列的協方差。
拿c(1,2)的求解過程來說
c(1,2)=sum((a(:,1)-mean(a(:,1))).*(a(:,2)-mean(a(:,2))))/(size(a,1)-1);
1. a(:,1)-mean(a(:,1)),第一列的元素減去該列的均值得到
-1.3333
-2.3333
3.6667
2, a(:,2)-mean(a(:,2)),第二列的元素減去該列的均值得到
-0.3333
1.6667
-1.3333
3, 再將第一步與第二部的結果相乘
-1.3333 -0.3333 0.4444
-2.3333 .* 1.6667 = -3.8889
3.6667 -1.3333 -4.8889
4, 再將結果求和/size(a,1)-1 得 -4.1667,該值即為c(1,2)的值。
再細看一下是不是與協方差公式:Cov(X,Y) = E{ [ (X-E(X) ] [ (Y-E(Y) ] } 過程基本一致呢,只是在第4步的時候matlab做了稍微的調整,自由度為n-1,減少了一行的樣本值個數。
>> a=[-1,1,2;-2,3,1;4,0,9]
a =
-1 1 2
-2 3 1
4 0 9
>> cov(a)
ans =
10.3333 -4.1667 14.0000
-4.1667 2.3333 -5.5000
14.0000 -5.5000 19.0000
>> dim1=a(:,1)
dim1 =
-1
-2
4
>> dim2=a(:,2)
dim2 =
1
3
0
>> dim3=a(:,3)
dim3 =
2
1
9
>> dim1-mean(dim1)
ans =
-1.3333
-2.3333
3.6667
>> dim2-mean(dim2)
ans =
-0.3333
1.6667
-1.3333
>> m=dim1-mean(dim1)
m =
-1.3333
-2.3333
3.6667
>> m=dim2-mean(dim2)
m =
-0.3333
1.6667
-1.3333
>> m=dim1-mean(dim1)
m =
-1.3333
-2.3333
3.6667
>> n=dim2-mean(dim2)
n =
-0.3333
1.6667
-1.3333
>> m.*n
ans =
0.4444
-3.8889
-4.8889
>> size(a,1)
ans =
3
>> sum(m.*n)
ans =
-8.3333
>> ans/2
ans =
-4.1667
posted @
2015-08-26 19:06 華夢行 閱讀(255) |
評論 (0) |
編輯 收藏