如何在容器中安装matlab2014a

1.安装前准备

1.1首先下载好安装过程需要用到的文件:

(1)下载MATHWORKS_R2014A.iso(下载地址请网搜);

(2)下载Matlab2014a for Linux安装包的破解包(下载地址:点击打开链接);

(3)下载jdk-7u71-linux-x64.tar(下载地址:http://www.oracle.com/technetwork/java/javase/downloads/java-archive-downloads-javase7-521261.html#jdk-7u71-oth-JPR,注意:matlab2014a在jdk8似乎不能安装,我没有验证,建议安装jdk7);

(4)下载caffe镜像,创建并进入caffe容器(过程略,不清楚的可参考docker文档)

注意:创建caffe容器时要加上--privileged参数,如"docker run --name wxb-caffe -it --privileged wxb/caffe /bin/bash",否则在第(7)步挂载matlab镜像时会出现"mount:could not find any loop device"错误。

(5)将上面下载好的三个文件拷贝到caffe容器的某个目录下,我拷贝到了/root目录(其他目录也可以)。

注:将你电脑中的文件拷贝到容器中时,参考下面的步骤(我是将自己电脑上的这三个文件拷贝到实验室服务器上运行的容器中)

a.用SecureCRT将本地电脑上的文件传输到服务器中,对于比较小(小于4G)文件,例如这里的jdk安装文件,可参考http://blog.csdn.net/ithomer/article/details/9503123。而对于大于4G的文件rz命令就不行了,这时可以用SecureCRT自带的SFTP来完成传输,具体方法是点击File->Connect SFTP Session或者按ALT+P,然后键入命令"put 文件在本地电脑中的位置"即可。例如"put E:\1_soft\savefile\MATHWORKS_R2014A.iso";

b.在服务器中,先退出容器,然后用命令"docker cp 文件在服务器中的位置 容器名:文件在容器中的位置"将服务器中的文件拷贝到容器中。例如我的MATHWORKS_R2014A.iso文件存放在/home/wxb/soft中,要将它拷贝到容器名为wxb-caffe的某个目录下(我的放在了/root目录),则用下面的命令:docker cp /home/wxb/soft/MATHWORKS_R2014A.iso wxb-caffe:/root即可。

(6)所有三个文件都拷贝到容器内后,解压破解包到/root/Crack文件中

(7)将下载好的iso文件挂载。方法是进入/root目录,然后键入下面的命令进行挂载:

mount -o loop MATHWORKS_R2014A.iso /media/cdrom

由于我是在caffe容器中安装matlab2014a,挂载时出现"mount point media cdrom does not exist"错误,不用担心,只需要用mkdir命令创建/media/cdrom文件夹即可,然后从新挂载就会成功。

1.2 安装JDK

(1)用命令tar -xzvf jdk-7u71-linux-x64.tar.gz将其解压,然后用下面的命令将jdk1.7.0_71移动到/usr/lib/jvm/jdk1.7.0_71中:

mv jdk1.7.0_71 /usr/lib/jvm/jdk1.7.0_71
(2)设置环境变量

vim /etc/profile
在文件末尾添加

export JAVA_HOME=/usr/lib/jvm/jdk1.7.0_71
保存并推出,然后使用下面的命令是设置生效

source /etc/profile
修改系统的默认jdk

update-alternatives --install/usr/bin/java java /usr/lib/jvm/jdk1.7.0_71/bin/java 300

update-alternatives --install/usr/bin/javac javac /usr/lib/jvm/jdk1.7.0_71/bin/javac 300

update-alternatives --config java

update-alternatives --config javac
输入java -version,看到如下信息则表明设置成功

java version "1.7.0_71"

Java(TM) SE Runtime Environment (build1.7.0_71-b14)

Java HotSpot(TM) 64-Bit Server VM (build24.71-b01, mixed mode)

1.3 创建安装目录

mkdir -p /usr/local/matlab/etc

mkdir -p /usr/local/matlab/2014a


2.安装Matlab

2.1 编辑配置文件

将配置文件拷贝到/usr/local/matlab/etc中,命令如下:

cp /media/cdrom/installer_input.txt /usr/local/matlab/etc

cp /media/cdrom/activate.ini /usr/local/matlab/etc

cp ~/Downloads/Crack/ /usr/local/matlab/etc
修改文件的读写属性,命令如下:

chmod +w/usr/local/matlab/etc/installer_input.txt

chmod +w /usr/local/matlab/etc/activate.ini
编辑installer_input.txt文件,按如下内容设置配置项:

destinationFolder=/usr/local/matlab/2014a #安装目录

fileInstallationKey= 12345-67890-12345-67890#序列号,似乎可以随便写

agreeToLicense=yes #同意协议

outputFile=/tmp/mathwork_install.log #安装日志

mode=silent #开启无人值守安装

activationPropertiesFile=/usr/local/matlab/etc/activate.ini#激活文件

licensePath= /usr/local/matlab/etc/license_405329_R2014a.lic#license文件

编辑activate.ini文件,按如下内容设置

isSilent=true #开启silent模式

activateCommand=activateOffline #设置激活方式,离线激活 无需联网

licenseFile=/usr/local/matlab/etc/license_405329_R2014a.lic#license文件位置

2.2 安装

执行如下安装命令

/media/cdrom/install -inputFile/usr/local/matlab/etc/installer_input.txt

2.3 激活

安装完成后,对matlab进行破解

mv /usr/local/matlab/2014a/bin/glnxa64/libmwservices.so /usr/local/matlab/2014a/bin/glnxa64/libmwservices.so.bak

cp /root/Crack/Cract/Linux/libmwservices.so /usr/local/matlab/bin/glnxa64/

使用如下命令激活

/usr/local/matlab/2014a/bin/activate_matlab.sh -propertiesFile /usr/local/matlab/etc/activate.ini

2.4 设置环境变量

设置环境变量:

vim /etc/profile

在文件末尾添加

export PATH=/usr/local/matlab/2014a/bin:$PATH

保存并退出后使设置生效:

source /etc/profile

但是,如果以这种方式设置环境变量的话,每次退出容器后再用docker attach命令进入容器时,都需要先source /etc/profile才能使用matlab。为了不至于这么麻烦,可将环境变量添加到.bashrc文件中:

vim .bashrc

在文件末尾添加

export PATH=/usr/local/matlab/2014a/bin:$PATH

保存后退出即可,从此每次进入容器后直接键入matlab命令就可以使用matlab了。

至此安装完成!


  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
A*算法是一种在图形搜索和路径规划广泛应用的启发式搜索算法。它可以用于三维路径规划,但是需要对算法进行适当的修改。 在三维A*算法,需要将搜索空间从平面扩展到立体空间。这可以通过将每个节点表示为三元组(x,y,z),其x、y、z分别表示节点在三个轴上的坐标来实现。 在实现A*算法时,需要确定合适的启发式函数来估计从当前节点到目标节点的距离。在三维空间,可以使用欧几里得距离或曼哈顿距离等距离函数作为启发式函数。 另外,还需要考虑如何表示障碍物。一种常见的方法是将三维空间划分为立方体网格,并将每个网格标记为障碍或非障碍。在搜索过程,需要避开障碍物。 以下是一个简单的三维A*算法的示例代码: ``` function [path, cost] = astar3d(map, start, goal) % Three-dimensional A* algorithm % map: 3D occupancy grid (1: free, 0: occupied) % start: starting position (3D coordinate) % goal: goal position (3D coordinate) % Define heuristic function (Euclidean distance) heuristic = @(pos) norm(pos - goal); % Initialize open and closed lists open = PriorityQueue(); closed = containers.Map(); % Add starting node to open list g_score = 0; f_score = g_score + heuristic(start); open.insert(start, f_score); % Loop until goal is found or open list is empty while ~open.isempty() % Get node with lowest f-score from open list [current_pos, f_score] = open.pop(); % Check if current node is goal if isequal(current_pos, goal) % Reconstruct path and return path = reconstruct_path(closed, start, goal); cost = g_score; return; end % Add current node to closed list closed(num2str(current_pos)) = g_score; % Expand neighbors neighbors = get_neighbors(map, current_pos); for i = 1:size(neighbors, 1) neighbor_pos = neighbors(i, :); % Calculate tentative g-score for neighbor tentative_g_score = g_score + norm(current_pos - neighbor_pos); % Check if neighbor is already in closed list if isKey(closed, num2str(neighbor_pos)) % Skip neighbor if it has already been evaluated continue; end % Check if neighbor is in open list if open.ismember(neighbor_pos) % Check if tentative g-score is better than previous g-score if tentative_g_score < closed(num2str(neighbor_pos)) % Update neighbor's g-score and f-score closed(num2str(neighbor_pos)) = tentative_g_score; f_score = tentative_g_score + heuristic(neighbor_pos); open.update(neighbor_pos, f_score); end else % Add neighbor to open list closed(num2str(neighbor_pos)) = tentative_g_score; f_score = tentative_g_score + heuristic(neighbor_pos); open.insert(neighbor_pos, f_score); end end % Update g-score g_score = closed(num2str(current_pos)); end % No path found path = []; cost = inf; end function neighbors = get_neighbors(map, pos) % Get neighboring nodes that are free and within map bounds [x, y, z] = ind2sub(size(map), find(map)); neighbors = [x, y, z]; neighbors = neighbors(~ismember(neighbors, pos, 'rows'), :); distances = pdist2(pos, neighbors); neighbors(distances > sqrt(3)) = NaN; % limit to 1-neighborhood neighbors(any(isnan(neighbors), 2), :) = []; neighbors = neighbors(map(sub2ind(size(map), neighbors(:,1), neighbors(:,2), neighbors(:,3))) == 1, :); end function path = reconstruct_path(closed, start, goal) % Reconstruct path from closed list path = [goal]; while ~isequal(path(1,:), start) pos = path(1,:); for dx = -1:1 for dy = -1:1 for dz = -1:1 neighbor_pos = pos + [dx, dy, dz]; if isKey(closed, num2str(neighbor_pos)) && closed(num2str(neighbor_pos)) < closed(num2str(pos)) pos = neighbor_pos; end end end end path = [pos; path]; end end classdef PriorityQueue < handle % Priority queue implemented as binary heap properties (Access = private) heap; count; end methods function obj = PriorityQueue() obj.heap = {}; obj.count = 0; end function insert(obj, item, priority) % Add item with given priority to queue obj.count = obj.count + 1; obj.heap{obj.count} = {item, priority}; obj.sift_up(obj.count); end function [item, priority] = pop(obj) % Remove and return item with lowest priority from queue item = obj.heap{1}{1}; priority = obj.heap{1}{2}; obj.heap{1} = obj.heap{obj.count}; obj.count = obj.count - 1; obj.sift_down(1); end function update(obj, item, priority) % Update priority of given item in queue for i = 1:obj.count if isequal(obj.heap{i}{1}, item) obj.heap{i}{2} = priority; obj.sift_up(i); break; end end end function tf = isempty(obj) % Check if queue is empty tf = obj.count == 0; end function tf = ismember(obj, item) % Check if item is in queue tf = false; for i = 1:obj.count if isequal(obj.heap{i}{1}, item) tf = true; break; end end end end methods (Access = private) function sift_up(obj, index) % Move item up in heap until it satisfies heap property while index > 1 parent_index = floor(index / 2); if obj.heap{index}{2} < obj.heap{parent_index}{2} temp = obj.heap{index}; obj.heap{index} = obj.heap{parent_index}; obj.heap{parent_index} = temp; index = parent_index; else break; end end end function sift_down(obj, index) % Move item down in heap until it satisfies heap property while index * 2 <= obj.count child_index = index * 2; if child_index + 1 <= obj.count && obj.heap{child_index + 1}{2} < obj.heap{child_index}{2} child_index = child_index + 1; end if obj.heap{child_index}{2} < obj.heap{index}{2} temp = obj.heap{index}; obj.heap{index} = obj.heap{child_index}; obj.heap{child_index} = temp; index = child_index; else break; end end end end end ``` 该实现使用了一个基于二叉堆的优先队列来管理开放列表,并使用容器映射来管理关闭列表。搜索空间被划分为立方体网格,并使用三元组(x,y,z)表示每个节点的位置。启发式函数使用欧几里得距离,障碍物被标记为0,空闲区域被标记为1。在搜索过程,只扩展空闲节点,并且避开障碍物。 请注意,该实现并不是最优的实现,因为它没有使用任何优技巧,如跳跃点或平滑路径。但是,它可以作为三维A*算法的一个简单示例来帮助您开始。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值